if(Auth::attempt(['username' => Input::get('username'), 'password' => Input::get('password')])){
return Auth::user();
}
return 'Failed!';
这是有问题的代码,我确信问题出在Auth::attempt
行。我找到了关于此的其他主题,但他们都没有解决方案。即:https://laracasts.com/forum/?p=1314-laravel-from-scratch-authentication-lesson-help/0
我的User
模型实现了UserInterface
,我还将use Illuminate\Support\Facades\Auth as Auth;
放在控制器中,以防Auth::attempt
部分无法识别。然而,无论有没有use ...
,它都不起作用。
我也试过
Auth::attempt(Input::only('username', 'password'))
我总是到Failed!
部分......
密码在数据库中存储为散列字符串,当我使用以下代码进行调试时:
echo Input::get('username') . "____" . Input::get('password');
die();
我得到了正确的结果。所以,除了问题必须在::attempt
函数中发生之外,我无法想到其他任何事情。
任何消息?
**更新:** User
模型
使用Illuminate \ Auth \ UserTrait; 使用Illuminate \ Auth \ UserInterface; 使用Illuminate \ Auth \ Reminders \ RemindableTrait; 使用Illuminate \ Auth \ Reminders \ RemindableInterface;
class User extends Eloquent implements UserInterface, RemindableInterface {
use UserTrait, RemindableTrait;
protected $fillable = [
'username',
'password',
'email'
];
public static $rules = [
'username' => 'required',
'password' => 'required',
'email' => 'required'
];
public static $error_messages;
/**
* The database table used by the model.
* @var string
*/
protected $table = 'users';
/**
* The attributes excluded from the model's JSON form.
* @var array
*/
protected $hidden = ['password', 'remember_token'];
public static function isValid($input)
{
$validation = Validator::make($input, static::$rules);
if ($validation->passes()) return true;
static::$error_messages = $validation->messages();
return false;
}
答案 0 :(得分:1)
我找到了问题的原因:
有趣的是,它在数据库中。 password
列的限制为15个字符,而哈希编码的密码值包含数十个字符。因此,从输入中获取的密码值的哈希值没有完全保存在DB中,而只是哈希码的前15个字符。因此,去散(如果我可以这样称呼它)从未成功过。 :)
这是一个非常愚蠢的错误,但在我看来很容易偶然发现......