2016-03-01 205 views
0

我想在laravel 5中編寫自己的註冊和登錄方法,僅用於學習目的,我想知道我是否正確。具體如下: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' => '[email protected]']); 

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; 
} 

回答

1

我會添加到這個代碼的唯一的事情是確保用戶名沒有取在數據庫中通過RegisterRequest類。您可以在驗證規則中使用unique來完成此操作。之前的Laravel版本(5.2之前版本)也使用service來進行註冊,但似乎已經放棄了在應用的默認認證流程中更簡單的控制器設置。

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

你應該用一個用戶名來做的唯一衛生設施取決於你如何使用它。在數據庫方面,模型使用下面的查詢生成器(使用PDO),因此值應該正確地轉義。如果您打算將這些字符作爲url slug或參數使用,則可以強制執行特定字符(或者不使用某些字符)。在這種情況下,您可以在JavaScript中驗證它們以及爲此特定請求創建的Request類。

最後,控制器看起來很好,如果這是你打算。之後您可能需要將其重定向到登錄頁面,或者在註冊後立即將其登錄,然後將其重定向到他們應該看到的任何頁面。這完全取決於用戶在創建帳戶時需要經歷哪些流程。

+0

是啊我忘了發佈我的規則在這裏,但我使用'獨特',也使用'相同'的密碼和密碼重複輸入:) 感謝您的答案,雖然,幫助我確保我在正確的軌道上。我將爲註冊後的用戶自動登錄一個方法。 – Hardist