【问题标题】:Laravel - Append to auth user for only current sessionLaravel - 仅针对当前会话附加到身份验证用户
【发布时间】:2017-07-09 10:16:24
【问题描述】:

我想给授权用户附加一个值

auth()->user() OR Auth::user()

仅适用于他们当前登录的会话。 (即他们注销或身份验证会话过期并且值丢失)。

Auth::user()->isTheOne = true;

以上代码仅适用于当前请求,不会在后续请求中持续存在。我怎样才能做到这一点。这样当我尝试从同一个用户的不同请求中访问上述代码时,它不会显示为 null?

【问题讨论】:

  • 常见的方法是扩展用户类并告诉授权使用该类。这可以在 'providers->users->model' 下的 config/auth.php 文件中设置

标签: php laravel session


【解决方案1】:

您可以在用户的​​类中添加isTheOne 函数:

public function isTheOne() {
    session(['is_the_one' => true]);
}

然后在控制器或其他地方调用你的方法:

Auth::user()->isTheOne();

编辑

根据您的评论,如果您想要更通用的东西,您可以尝试:

public function __set($key, $value) {
    session([$key => true]);
    parent::__set($key, $value);
}

因此,每次您拨打Auth::user()->isTheOne = true; 或类似的电话时,它都会记录到会话中。这对我来说似乎很奇怪,但如果这是你想要的,好吧(也许我误解了什么)。

【讨论】:

  • 我希望它是动态的,因为我实际上没有预定义的字段,所以这个解决方案对我没有帮助。
【解决方案2】:

如果您希望在会话期间持久化数据,您需要考虑使用 Laravel 提供的会话外观。一个简单的例子是

// Via a request instance...
$request->session()->put('key', 'value');

// Via the global helper...
session(['key' => 'value']);

有关会话和 Laravel 的更多信息read the documentation here

【讨论】:

  • 这是针对经过身份验证的用户会话还是整个应用程序会话?
【解决方案3】:

我想你可以设置会话然后,

public function postUpdate(Request $request) {

    if ($request->session()->has('user') {
        $user = $request->session()->get('user');

    } else {

        $user = Auth::user();
        $user->isTheOne = true;
        $request->session()->put('user', $user);

   }


}

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2019-07-26
    • 2017-01-24
    • 2019-08-26
    • 2020-10-06
    • 2014-07-07
    • 2019-05-18
    • 1970-01-01
    相关资源
    最近更新 更多