Laravel 5自定义验证
问题描述:
我想在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;
}
答
我会添加到这个代码的唯一的事情是确保用户名没有取在数据库中通过RegisterRequest
类。您可以在验证规则中使用unique
来完成此操作。之前的Laravel版本(5.2之前版本)也使用service来进行注册,但似乎已经放弃了在应用的默认认证流程中更简单的控制器设置。
我说检查请求的原因是因为控制器不应该真的关心数据是否有效。所有它关心的是将数据交给应用程序代码来完成工作,或者将视图显示出来。然而,该请求确实关心其中的数据,并且是执行此验证的最佳位置。这假设你实际上需要唯一的用户名。
你应该用一个用户名来做的唯一卫生设施取决于你如何使用它。在数据库方面,模型使用下面的查询生成器(使用PDO),因此值应该正确地转义。如果您打算将这些字符作为url slug或参数使用,则可以强制执行特定字符(或者不使用某些字符)。在这种情况下,您可以在JavaScript中验证它们以及为此特定请求创建的Request类。
最后,控制器看起来很好,如果这是你打算。之后您可能需要将其重定向到登录页面,或者在注册后立即将其登录,然后将其重定向到他们应该看到的任何页面。这完全取决于用户在创建帐户时需要经历哪些流程。
是啊我忘了发布我的规则在这里,但我使用'独特',也使用'相同'的密码和密码重复输入:) 感谢您的答案,虽然,帮助我确保我在正确的轨道上。我将为注册后的用户自动登录一个方法。 – Hardist