1

我正在 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() 返回什么错误。我已经研究了这个问题几个小时,不知道从哪里继续......

在 User 模型中,getKey() 方法返回 null,所以我认为我的数据库可能是错误的。但是数据正在被完美地获取。

谢谢你的时间。

4

3 回答 3

15

事实证明,这是一个愚蠢的错误。Laravel 在 smallcaps 中将默认主键定义为 'id'。我在数据库中使用的 id 被定义为“ID”。

我通过更改数据库中的字段名称来解决此问题。另一种选择是定义

protected $primaryKey = 'ID';

在你的模型中......

祝你今天过得愉快

于 2013-05-22T12:47:19.887 回答
1

$user = array( 'e-mail' => Input::get('E-mail'), 'password' => Input::get('password') );

在幕后,Eloquent 或 Fluent Query Builder 会尝试使用相当于以下内容的查询进行获取:

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

如果你有一个 field e-mail,这一切都很好,但这会导致 Eloquent 出现问题,因为它Auth::user()->e-mail变成了无效的语法。

于 2013-05-21T08:28:39.003 回答
0

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

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

如果页面没有 Web 中间件,则身份验证不起作用

于 2016-03-01T09:01:58.903 回答