我正在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。 我已经研究了这个问题几个小时,不知道从哪里继续......
在User模型中,getKey()方法返回null,所以我认为我的数据库可能是错误的。但数据正在完美呈现。
感谢您的时间。
答案 0 :(得分:14)
事实证明这是一个愚蠢的错误。 Laravel在小键盘中将默认主键定义为“id”。 我在数据库中使用的ID被定义为“ID”。
我通过更改数据库中的字段名称来修复此问题。 另一种选择是定义
protected $primaryKey = 'ID';
在您的模型中......
度过愉快的一天
答案 1 :(得分:1)
$user = array(
'e-mail' => Input::get('E-mail'),
'password' => Input::get('password')
);
在幕后,Eloquent或Fluent Query Builder将尝试使用相当于以下内容的查询来获取:
$user = User::where('e-mail', '=', ?)->first();
如果您有一个字段e-mail
,这将是一件好事,但这会导致Eloquent出现问题,因为Auth::user()->e-mail
成为无效的语法。
答案 2 :(得分:0)
只检查路由是否在Web中间件组
下Route::group(['middleware' => 'web'] , function() {
}
如果页面没有Web中间件,Auth不起作用