Laravel 4身份验证检查总是返回false


laravel 4 authentication check always returns false

我正在做一个应用程序在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') );

在后台,Eloquent或Fluent Query Builder会尝试使用类似于 的查询来获取:

$user = User::where('e-mail', '=', ?)->first();

如果您有一个字段e-mail,这将是很好的,但这将导致雄辩的问题,因为Auth::user()->e-mail成为无效的语法。

检查路由是否在web中间件组下

Route::group(['middleware' => 'web'] , function() {
}

Auth不能工作,如果页面没有web中间件