[翻译] 如何修改 Laravel 的登录验证

Laravel 包含一个 auth 系统,它包括一整套完整的注册、登录、注销、忘记密码等流程,让你可以非常方便的构建出用户系统的骨架。

所有设置完成后,登录和密码重置的验证逻辑被存储在两个 trait 中, AuthenticatesUsers 和 ResetsPasswords 。这藏的有点深,不过它们也很容易按需调整。让我们看看怎么整:

登录验证

默认情况下,只有 LoginController 这个类会引入 trait Illuminate\Foundation\Auth\AuthenticatesUsers 。如果你打开这该 trait 你会找到方法 validateLogin :

protected function validateLogin(Request $request)
    {
        $this->validate($request, [
            $this->username() => 'required', 'password' => 'required',
        ]);
    }

修改这段逻辑很简单,把整个方法代码复制进你的 LoginController 中,然后直接做你想要的修改。只需要你确定你添加了 use 这一行的内容。

<?php

namespace App\Http\Controllers\Auth;

use Illuminate\Http\Request;
use App\Http\Controllers\Controller;
use Illuminate\Foundation\Auth\AuthenticatesUsers;

class LoginController extends Controller
{
    use AuthenticatesUsers;

    public function __construct()
    {
        $this->middleware('guest', ['except' => 'logout']);
    }

    protected function validateLogin(Request $request)
    {
        $this->validate($request, [
            $this->username() => 'required', 
            'password' => 'required',
            // new rules here
        ]);
    }
}

重置密码验证

从 v5.3.20 开始,重置密码验证的逻辑也变成这样。在 Illuminate\Foundation\Auth\ResetsPasswords 中包含了一个方法 rules ,你可以在你自己的 ResetPasswordController 中扩展它

protected function rules()
{
    return [
        'token' => 'required', 'email' => 'required|email',
        'password' => 'required|confirmed|min:6',
    ];
}

Laravel 通过这种方式,提供了常见的用法的同时,也方便你为自己的需求进行定制。

本作品采用《CC 协议》,转载必须注明作者和本文链接
Night gathers, and now my watch begins.
本帖由 Summer 于 8年前 加精
《L05 电商实战》
从零开发一个电商项目,功能包括电商后台、商品 & SKU 管理、购物车、订单管理、支付宝支付、微信支付、订单退款流程、优惠券等
《L04 微信小程序从零到发布》
从小程序个人账户申请开始,带你一步步进行开发一个微信小程序,直到提交微信控制台上线发布。
讨论数量: 6
Summer

这效率

8年前 评论
monkey

Cool :+1:

8年前 评论

s y su s j su

8年前 评论

红红火火

8年前 评论

讨论应以学习和精进为目的。请勿发布不友善或者负能量的内容,与人为善,比聪明更重要!