【问题标题】:laravel 4 authentication check always returns falselaravel 4 身份验证检查总是返回 false
【发布时间】:2013-05-21 08:15:07
【问题描述】:

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

感谢您的宝贵时间。

【问题讨论】:

  • 这显然不是 PHP。
  • 是的……为什么不是呢?
  • 萨米,它只是模板。迈克,你能看看你的浏览器里有 cookie 吗?
  • 有一个cookie,“laravel_session”

标签: php laravel laravel-4


【解决方案1】:

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

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

protected $primaryKey = 'ID';

在你的模型中...

祝你有美好的一天

【讨论】:

    【解决方案2】:

    $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()-&gt;e-mail 成为无效语法。

    【讨论】:

    • 我将“电子邮件”字段更改为“用户名”,但出现同样的问题。我对 laravel 完全陌生,所以我可能误解了你的信息。我确实在与雄辩的合作。顺便说一句,这是我工作的基础教程:laravelbook.com/laravel-user-authentication
    【解决方案3】:

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

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

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2020-12-03
      • 1970-01-01
      • 2016-04-22
      • 2014-04-14
      • 2017-06-12
      • 1970-01-01
      • 2018-01-05
      • 1970-01-01
      相关资源
      最近更新 更多