我正在尝试Laravel的Auth类,但每当我尝试登录用户时,该方法返回false . 这是我的代码:
routes.php文件
Route::get('new-user', function() {
return View::make('register');
});
Route::post('new-user', function() {
$name = Input::get('name');
$email = Input::get('email');
$password = Hash::make(Input::get('password'));
$user = new User;
$user->name = $name;
$user->email = $email;
$user->password = $password;
$user->save();
});
Route::get('login', function() {
return View::make('login');
});
Route::post('login', function() {
$user = array(
'email' => Input::get('email'),
'password' => Hash::make(Input::get('password'))
);
if (Auth::attempt($user)) {
//return Redirect::intended('dashboard');
return "ok.";
} else {
return "Wrong.";
}
});
意见/ login.blade.php
{{ Form::open(array('url' => 'login', 'method' => 'post')) }}
<h1>Login:</h1>
<p>
{{ Form::label('email', 'Email: ') }}
{{ Form::text('email') }}
{{ Form::label('password', 'Password: ') }}
{{ Form::password('password') }}
</p>
<p>
{{ Form::submit('Login') }}
</p>
{{ Form::close() }}
配置/ auth.php
return array(
'driver' => 'eloquent',
'model' => 'User',
'table' => 'users',
'reminder' => array(
'email' => 'emails.auth.reminder', 'table' => 'password_reminders',
),
);
数据库具有电子邮件和密码字段,密码字段为varchar(60) . 每当我将登录信息发送到/ login时,它都会返回“Wrong” . 我真的看不出这里有什么不对吗?
5 回答
您的代码是错误的,因为您将错误的变量传递给
Auth::attempt()
. 该方法需要一个包含密钥用户名,密码的数组,并可选择记住 . 鉴于此,您的上述代码应为:希望有所帮助 .
此外,我将为您提供额外代码的片段,以改善您的工作流程 . 存储新用户的路线:
然后在您的用户模型中添加方法
这样,密码将在每次设置时自动散列
在尝试之前不要哈希密码:
这不起作用,因为auth :: attempt使用bcrypt将密码转换为hash,并在users表中查找匹配的hash .
简而言之,密码应该是存储在数据库表中的哈希值,用于auth ::尝试工作 .
这就是你的if()条件失败的原因 .
您可以使用bcrypt(密码)将密码存储为数据库中的哈希值,然后使用auth :: attempt
以下是来自laravel docs
https://laravel.com/docs/5.2/authentication#authenticating-users
您应该在模型类中实现laravel提供的
UserInterface
类:请记住,它有2个抽象方法,您应该在模型中声明 . 您可以按照原始
User.php
模型检查密码长度 . 数据库中必须为60或更高 .