【问题标题】:Laravel - forget previous urls in sessionLaravel - 忘记会话中以前的网址
【发布时间】:2018-02-22 02:16:33
【问题描述】:

情况:

在我们的系统中,从 Admin 注销用户只是将他们从 admin 部分注销,我们希望他们从应用程序注销(我们使用 laravel 的 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'));
}

【问题讨论】:

  • 您是否尝试在注销时删除预期的网址? Session::forget('url.intended');
  • 我做到了。它在父函数中,我现在将添加该代码以更明确。谢谢。

标签: php laravel session login logout


【解决方案1】:

解决方案:

我知道这可能不是最佳解决方案,但它会起作用,而且通常合乎逻辑。

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

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

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2012-07-15
    • 2021-06-02
    • 2021-07-04
    • 2016-08-29
    • 2020-01-05
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多