繁体   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