身份验证 – laravel sentry重定向::意图无法正常工作

我正在尝试正确地在我的应用程序中设置哨兵包.

我可以登录和退出用户并保护路由,但我似乎无法获得重定向::打算正常工作.我的理解是,在被定向到登录页面之前,用户将被带回他们最初呼叫的路由.目前它只是保持重定向到默认页面.

在我的routes.php中,我设置了以下组:

Route::group(array('before' => 'sentryAuth'), function () {...}

在这个组中,我放置了所有受保护的路线.

在我的filters.php中,我有以下过滤器:

Route::filter('sentryAuth', function () {

if (!Sentry::check()) {

    return Redirect::route('login');
} 
});

Route :: filter(‘sentryGuest’,function(){

if (Sentry::check()) {
    return Redirect::intended('dashboard');
}
});

在我的userController中,我有以下代码:

public function postAuthenticate()
{
    try {
        // Set login credentials
        $credentials = array(
            'email' => Input::get('email'),
            'password' => Input::get('password')
        );

        // Try to authenticate the user
        $user = Sentry::authenticate($credentials, false);
    } catch (Cartalyst\Sentry\Users\LoginRequiredException $e) {
        echo 'Login field is required.';
    }
    catch (Cartalyst\Sentry\Users\PasswordRequiredException $e) {
        echo 'Password field is required.';
    }
    catch (Cartalyst\Sentry\Users\UserNotFoundException $e) {
        echo 'User was not found.';
    }
    catch (Cartalyst\Sentry\Users\WrongPasswordException $e) {
        echo 'Wrong password, try again.';
    }
    catch (Cartalyst\Sentry\Users\UserNotActivatedException $e) {
        echo 'User is not activated.';
    }

    if (!Sentry::check()) {
        return Redirect::to('user/login');
    } else {
        return Redirect::intended('dashboard');
    }
}

我试图在没有登录的情况下访问页面’预订/创建’.我被带到登录页面,登录但它然后带我到仪表板而不是预订/创建.

我错过了什么吗?我需要额外的代码来实现预期的工作吗?

我不确定这一点,因为我没有将Sentry用于我当前的项目..所以这只是一种预感.

看来既然你在laravel 4中使用了SentryAuth而不是原生的Auth类,那么目标url的会话项没有设置..我查看了Redirector类的API,我看到了这个:

public function intended($default, $status = 302, $headers = array(), $secure = null)
{
    $path = $this->session->get('url.intended', $default);

    $this->session->forget('url.intended');

    return $this->to($path, $status, $headers, $secure);
}

并且如代码所示,会话密钥是’url.intended’.我使用原生Auth过滤器验证了这一点,并且预期的URL在Session :: get(‘url.intended’)上按预期设置.

所以可能的解决方案是在会话中手动设置它.一个例子是:

在你的过滤器上

Route::filter('sentryAuth', function () {

    if (!Sentry::check()) {
        Session::put('loginRedirect', Request::url());
        return Redirect::route('login');
    } 
});

在postAuthenticate()方法上

if (!Sentry::check()) {
    return Redirect::to('user/login');
} else {
    // Get the page we were before
    $redirect = Session::get('loginRedirect', 'dashboard');

    // Unset the page we were before from the session
    Session::forget('loginRedirect');

    return Redirect::to($redirect);
}

部分代码取自here以供参考.. ^ _ ^

相关文章
相关标签/搜索