mic*_*cky 7 php laravel laravel-5
我正在使用laravel手动身份验证系统.提交表单重定向到下面显示的此路由.并且在authenticate()函数中,名称和密码永远不会匹配我之前存储的.即Auth::attempt总是假的.
Route::post('/logintest', 'mycontroller@authenticate');
Route::get('/home', ['middleware' => 'auth', function() {
echo "home page";});
}]);
Run Code Online (Sandbox Code Playgroud)
验证功能:
public function authenticate(Request $request)
{
$input=$request->all();
$password=$input['password'];
$name=$input['name'];
if (Auth::attempt(['Name' => $name, 'Password' => $password]) ){
return redirect()->intended('/home');
} else
{
return redirect('/login')->with('message','Error logging in!');
}
}
Run Code Online (Sandbox Code Playgroud)
我以这种方式注册了用户.使用bcrypt()对密码进行哈希处理.功能.但在authenticate()函数中,我正在与普通密码进行比较.我在哪里阅读Auth自动处理它.或者我是否应该在config/auth.php中更改某些内容,因为我使用了名称来验证而不是用户名?
public function register(Request $request)
{
$input=$request->all();
$password=bcrypt($input['password']);
$name=$input['name'];
$insert= User::insert(['Name'=>$name,'Password'=>$password]);
return redirect('/login')
->with('message','successfully Registered.');
}
Run Code Online (Sandbox Code Playgroud)
这些名字有问题.Auth@attempt获取除password(区分大小写)之外的所有凭据,您传入该数组并运行where查询(这是您可以为尝试添加额外约束的方式,因为它们只是条件的位置).如果它找到了一个模型,那么它将password对您传递的凭据(区分大小写)和模型的哈希密码进行哈希检查$model->getAuthPassword().
凭证中的此字段是特殊的,因为它是Auth所需要的,因此它知道凭证中的哪个字段是密码.它与您在users表上使用的字段没有直接关联,必须password在凭证数组中命名.除了"密码"之外,您传递的凭据中的其他字段会直接与用户表上的字段相关联,因为它们是该表上数据库查询的条件.
如果您使用表格上的"密码"以外的字段作为密码,则必须在用户模型中声明.在您的情况下,您使用的是"密码".(这是所有区分大小写的)
class User ....
{
...
public function getAuthPassword()
{
return $this->Password; // case sensitive
}
...
}
Run Code Online (Sandbox Code Playgroud)
传递凭据时,您传递纯文本密码,因为会hash_check发生,而不是直接比较.
您可以在实际表格中为字段命名,只需要让Eloquent知道这一点.