【问题标题】:How can I properly authenticate a user as an admin in Laravel?如何正确地将用户身份验证为 Laravel 中的管理员?
【发布时间】:2016-12-15 17:10:17
【问题描述】:

我正在尝试将“重影”引入我的应用程序 - 我可以从用户的 POV 访问我们的应用程序。

目前使用loginUsingID 函数来实现这一点,只有管理员可以访问受保护的路由。但是,我还想通过在我们的应用顶部显示一个栏来向管理员显示他们正在模仿用户。

我正在考虑向用户 is_being_ghosted 添加一个属性 - 在 logout 上将其设置为 false,在 login 上设置为 false,在 ghostLogin 上设置为 true。

但我意识到管理员尝试隐藏用户的可能性很小,并且它设置了该属性,并且当他们正在调查帐户中的内容时,用户自己会刷新他们的页面(他们已经过身份验证,所以不需要再次登录)。在那种情况下,他们会在顶部看到这个“管理栏”,这显然是我不希望发生的。

有没有一种有效的方法来实现我在这里尝试做的事情?我是不是走错路了?

【问题讨论】:

  • 在会话中设置is_being_ghosted,而不是在用户上。会话仅适用于管理员。

标签: php laravel authentication


【解决方案1】:

正如jszobody 所提到的。您宁愿管理会话内的状态。您保护/ghost 路由,然后如果设置了original-user-id 会话,则显示您的栏和unghost 链接。

public function ghost(Request $request, $id)
{
    $request->session()->put('original-user-id', Auth::user()->id);

    Auth::loginUsingId($id);

    return redirect('/');
}

public function unghost(Request $request)
{
    if ($request->session()->has('original-user-id')) {
        Auth::loginUsingId($request->session()->pull('original-user-id'));
    }

    return redirect('/');
}

更新:

ghost 端点基本上接受您要模拟的id,通常通过 ajax 搜索输入或类似的东西找到。任何适合您的用例。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-04-19
    • 2014-10-08
    • 1970-01-01
    • 2011-11-30
    • 2015-08-04
    相关资源
    最近更新 更多