Laravel - 忘记以前的网址

时间:2017-09-13 11:27:47

标签: php laravel session login logout

情况:

在我们的系统中,从Admin中注销用户只会将它们从管理部分注销,我们希望它们从应用程序中注销(我们正在使用laore的encore管理包)。我创建了一个新的注销类,它覆盖了默认的管理注销,并运行了标准的laravel注销。这成功地将用户从系统中注销并将其返回到登录屏幕。

问题:

问题是,在第一次尝试重新登录时,用户被重定向到注销方法,然后将其返回到登录屏幕(在浏览器的网络选项卡中验证)

问题:

如何让laravel忘记此URL并像新登录一样处理,或者是否有更好的方法来处理此注销?

这是我的代码:

routes.php文件:

$router->get('auth/logout', 'AdminAuthController@logout');

AdminAuthController:

namespace App\Admin\Controllers;

use Encore\Admin\Controllers\AuthController;
use Illuminate\Foundation\Auth\AuthenticatesUsers;
use Illuminate\Http\Request;

class AdminAuthController extends AuthController
{
use AuthenticatesUsers {
    logout as logoutUser;
}

 public function logout(Request $request) {
    //runs the Encore/Admin logout function
    parent::getLogout();

    //runs standard logout to logout user after admin logout
    $this->logoutUser($request);

    //redirect to home whcih will be login page since user is logged out
    return redirect('/');
 }
}

父功能:

/**
 * User logout.
 *
 * @return Redirect
 */
public function getLogout()
{
    Auth::guard('admin')->logout();

    session()->forget('url.intented');

    return redirect(config('admin.prefix'));
}

1 个答案:

答案 0 :(得分:0)

解决方案:

我认识到这可能不是最理想的解决方案,但它会起作用,而且它通常具有逻辑意义。

在我经过身份验证的方法中(所以登录后)我检查了预期的URL字符串,如果它包含单词logout,我会重定向到应用程序的根页面。因为从逻辑上登录,你永远不应该访问注销。 / p>

if(str_contains(redirect()->intended($this->redirectPath())->getTargetUrl(), 'logout')){
        return redirect('/');
    }
return redirect()->intended($this->redirectPath());

我仍然愿意改进,所以如果有人有更好的想法,请发帖!