我正在尝试在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;
}
答案 0 :(得分:1)
我唯一要添加到此代码中的是确保用户名不是通过RegisterRequest
类在数据库中获取的。您可以在验证规则中使用unique
来执行此操作。早期版本的Laravel(5.2之前版本)也使用了service进行注册,但这似乎已被放弃,以便在应用程序的默认身份验证流程中进行更简单的控制器设置。
我说检查请求的原因是因为控制器不应该关心数据是否有效。它所关心的只是将数据交给应用程序代码来完成工作,或者交给要显示的视图。但是,请求确实关心其中的数据,并且是执行此验证的最佳位置。这假设您实际上想要唯一的用户名。
您应该使用用户名进行的唯一卫生设施取决于您使用它的方式。对于数据库,模型使用下面的查询构建器(使用PDO),因此应正确转义值。如果您打算将这些字符用作url slugs或参数,则可以强制执行特定字符(或者某些字符不被使用)。在这种情况下,您可以在javascript中验证它们以及您为此特定请求创建的Request类。
最后,如果你想要的话,控制器看起来很好。您可能希望之后将它们重定向到登录页面,或者在注册后立即将它们登录,然后将它们重定向到他们应该看到的任何页面。这完全取决于您希望用户在创建帐户时完成的过程。