簡體   English   中英

Laravel 5自定義身份驗證

[英]Laravel 5 custom auth

我正試圖在laravel 5中編寫自己的注冊和登錄方法,僅出於學習目的,我想知道自己是否走對了。 具體包括以下內容:

$this->user->username = $request['username'];

我是否應該對此進行其他處理,清理或檢查它是否是有效的用戶名?

其次,我的public function doRegister足夠嗎? 由於驗證是在RegisterRequest類中完成的?

路線:

Route::get('register', ['as' => 'register', function() {
    return view('register');
}]);

Route::post('register', ['as' => 'register.post', 'uses' => 'AuthController@doRegister']);

AuthController:

<?php

namespace App\Http\Controllers;

use App\User;
use App\Password;
use App\Http\Requests\RegisterRequest;

class AuthController extends Controller
{
    protected $user;

    public function __construct(User $user)
    {
        $this->user = $user;
    }

    public function doRegister(Password $password, RegisterRequest $request)
    {
        $this->user->username = $request['username'];
        $this->user->password = $password->hash($request['password']);

        $this->user->save();
    }
}

密碼模型:

public function hash($password)
{
    $hash = password_hash($password, PASSWORD_BCRYPT);

    return $hash;
}

我要添加到此代碼中的唯一一件事是確保用戶名不會通過RegisterRequest類在數據庫中獲取。 您可以通過在驗證規則中使用unique來實現。 Laravel的早期版本(5.2之前的版本)也使用了服務進行注冊,但是似乎已放棄了該應用程序的默認身份驗證流程中的更簡單的控制器設置。

我說要檢查請求的原因是因為控制器實際上不需要關心數據是否有效。 它關心的只是將數據傳遞給應用程序代碼來工作,或者傳遞給要顯示的視圖。 但是,該請求確實關心其中的數據,並且是執行此驗證的最佳位置。 當然,這假設您實際上需要唯一的用戶名。

您應該使用用戶名進行的唯一清潔操作取決於用戶使用方式。 關於數據庫,模型在下面使用查詢構建器(使用PDO),因此應正確轉義值。 如果您打算使用特定字符(或不使用某些特定字符)作為url標記或參數,則可以強制使用。 在這種情況下,您可以使用javascript以及為此特定請求創建的Request類來驗證它們。

最后,如果這正是您想要的,則控制器看起來不錯。 您可能希望隨后將它們重定向到登錄頁面,或者在注冊后立即將它們登錄,然后將它們重定向到應該看到的任何頁面。 實際上,這全都取決於您希望用戶在創建帳戶時要經歷的過程。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM