[翻譯] 如何修改 Laravel 的登入驗證

茄子發表於2017-01-24

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.

相關文章