我正在做一个应用程序在laravel 4,我遇到了一个问题。
到目前为止,我已经尝试创建了一个身份验证系统。我遵循了几个教程,但他们似乎没有一个工作。可能是因为教程已经过时了(laravel在不断发展)。这是我的情况:
我有一个登录表单,这个表单对用户进行身份验证。它工作得很好,这是我的routes.php文件中的代码。Route::post('login', function () {
$user = array(
'e-mail' => Input::get('E-mail'),
'password' => Input::get('password')
);
if (Auth::attempt($user)) {
return Redirect::route('home')
->with('flash_notice', 'You are successfully logged in.');
}
// authentication failure! lets go back to the login page
return Redirect::route('login')
->with('flash_error', 'Your username/password combination was incorrect.')
->withInput();
});
所以当我登录时,我进入主页,显示消息,没有问题。在我看来,我有以下代码(我使用刀片)。
<ul>
<li><a href="{{ URL::to('home') }}">Home</a></li>
@if(Auth::check())
<li><a href="{{ URL::to('profile') }}">Profile</a></li>
<li><a href="{{ URL::to('logout', 'Logout ('.Auth::user()->e-mail.')') }}">Logout</a></li>
@else
<li><a href="{{ URL::to('login') }}">Login</a></li>
@endif
</ul>
问题是无论Auth::check()返回什么都是false。我已经研究这个问题好几个小时了,不知道从哪里继续…
在用户模型的getKey()方法返回null,所以我认为我的数据库可能是错误的。但是数据正在被完美地获取。
感谢您的宝贵时间。
事实证明这是一个愚蠢的错误。Laravel将默认主键定义为'id'。我在数据库中使用的id被定义为' id '。
我通过更改数据库中的字段名来修复这个问题。另一个选择是定义
protected $primaryKey = 'ID';
祝你今天愉快
$user = array(
'e-mail' => Input::get('E-mail'),
'password' => Input::get('password')
);
$user = User::where('e-mail', '=', ?)->first();
如果您有一个字段e-mail
,这将是很好的,但这将导致雄辩的问题,因为Auth::user()->e-mail
成为无效的语法。
检查路由是否在web中间件组下
Route::group(['middleware' => 'web'] , function() {
}
Auth不能工作,如果页面没有web中间件