laravel 4身份验证检查始终返回false

时间:2013-05-21 08:15:08

标签: php laravel laravel-4

我正在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,所以我认为我的数据库可能是错误的。但数据正在完美呈现。

感谢您的时间。

3 个答案:

答案 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不起作用