1

我有一个登录表单,我正在使用正确的凭据登录。当您登录时,我做了一个重定向到我的“关于”页面(使用关于页面来测试此功能)。我用以下代码片段完成了上述操作

        $input = Input::all();
        $login = Auth::attempt([
            'username' => $input['username'],
            'password' => $input['password']
        ]);

        if($login){
            return Redirect::to('about');
        }
        else{
            dd('not logged in!');
        }

这个片段运行良好但现在在我添加的关于页面的路径中->before('auth');所以如果我没有登录,我将被重定向到登录页面并且如果我已经登录继续。

代码片段:

Route::get('about', function(){
    $title = 'About';
    return View::make('about')->with('title', $title);
})->before('auth');

但是通过添加->before('auth');,即使在使用正确的凭据登录后,我也总是被重定向到日志记录页面。所以我登录,通常我希望被重定向到 about 页面,但我再次被重定向到登录页面。

我究竟做错了什么?

编辑

做了更多的调试,这就是我发现的:

重定向到我的 about 路线并执行此操作:

Route::get('about', function()
{
    dd( Auth::check() ); // This returns false
});

但是我没有尝试重定向到我的路线:

if($login){
    dd( Auth::check() ); // This returns true
}

所以在重定向之后似乎我要注销或类似的东西?

4

2 回答 2

1

您应该有一个Auth过滤器并且需要检查是否已记录in/out,例如:

Route::filter('auth', function()
{
    if (Auth::guest()) return Redirect::to('login');
});

并且应该添加此(过滤器)代码app/filters.php和您的路线(您拥有的)

Route::get('about', function(){
    $title = 'About';
    return View::make('about')->with('title', $title);
})->before('auth');

此外,您可以将其用作下面给定的代码

Route::get('about', array('before' => 'auth' ,function()
{
    $title = 'About';
    return View::make('about')->with('title', $title);
}));

更新 :

此外,如果您使用数据库进行会话,请确保它primary keyid模型(用户模型)中,如果没有,则手动设置它,例如

protected $primaryKey = "IdOfTheCustomIDFieldInTheTable";
于 2013-10-06T21:05:30.817 回答
1

您是否尝试过将记住参数传递给 Auth::attempt?

$login = Auth::attempt([
    'username' => $input['username'],
    'password' => $input['password']
], true);

另外,您使用的是哪种会话存储机制?

于 2013-10-08T10:47:41.467 回答