如何在Laravel中用户登录时设置会话变量

时间:2017-02-21 06:29:41

标签: php laravel laravel-5 session-variables laravel-5.3

使用Laravel进行发票应用程序开发。我在settings表中为每个用户存储日期和金额格式。

当用户登录其帐户时如何设置Session变量?请提出任何建议。我使用的是Laravel 5.3。

5 个答案:

答案 0 :(得分:10)

当然,文档告诉我们如何store session data *,但他们没有解决OP关于在登录时存储会话数据的问题。您有几个选项,但我认为最明确的方法是覆盖AuthenticatesUsers特征的经过身份验证的方法。

将覆盖添加到LoginController:

protected function setUserSession($user)
{
    session(
        [
            'last_invoiced_at' => $user->settings->last_invoiced_at,
            'total_amount_due' => $user->settings->total_amount_due
        ]
    );
}

然后您可以将会话设置为:

<?php

namespace app\Listeners;

use Illuminate\Auth\Events\Login;

class SetUserSession
{
    /**
     * @param  Login $event
     * @return void
     */
    public function handle(Login $event)
    {
        session(
            [
                'last_invoiced_at' => $event->user->settings->last_invoiced_at, 
                'total_amount_due' => $event->user->settings->total_amount_due
            ]
        );
    }
}

如果你想要更聪明一点,你可以为Login或Authenticated事件创建一个监听器,并在其中一个events *触发时设置会话。

创建一个侦听器,例如SetUpUserSession:

{{1}}

*链接转到5.4,但这并没有从5.3更改。

答案 1 :(得分:2)

我已经使用Auth类管理用户数据,如下所示:

public function index(){   
  $user_id = Auth::user()->id;  
}

但是您必须添加“使用身份验证;”在类声明之前。然后,您可以将任何数据添加到会话变量。

答案 2 :(得分:1)

当对应用程序进行新的登录时,Laravel会触发事件。 事件触发时,您可以为其添加一个侦听器,然后添加一个session。 这是我制作的侦听器的内容。

<?php

namespace App\Listeners\Auth;

 use Illuminate\Auth\Events\Login;
 use Illuminate\Contracts\Queue\ShouldQueue;
use Illuminate\Queue\InteractsWithQueue;

class UserLoggedIn
{
    /**
     * Create the event listener.
     *
     * @return void
     */
    public function __construct()
    {
        //
    }


    public function handle(Login $event)
    {

        if ($event->user->hasRole('subsidiary_admin')) {



            \Session::put('subsidiary_admin', $event->user->subsidiaryBoUser->subsidiary_id);
            \Session::put('subsidiary', $event->user->subsidiaryBoUser->subsidiary);



        }






    }
}

我就这样在eventServiceProvider上注册了

 'Illuminate\Auth\Events\Login' => [
            'App\Listeners\Auth\UserLoggedIn',
        ],

答案 3 :(得分:0)

这是我在做什么:

我的帮助文件中有这个:

\App\Helpers\helpers.php:

function signedUser()
{
  return [
    'id'           => Auth::id(),
    'group_id'     => Auth::user()->group_id,
    'group_name'   => Auth::user()->group->name,
    'avatar'       => Auth::user()->avatar,
    'first_name'   => Auth::user()->first_name,
    'full_name'    => Auth::user()->full_name,
  ];
}

关于我的用户模型:

public function group()
{
  return $this->belongsTo('App\Models\Group');
}

public function getFullNameAttribute()
{
   $full_name = ucfirst($this->first_name) . ' ' . ucfirst($this->middle_name[0]) . '. ' . ucfirst($this->last_name);

   return $full_name;
}

然后我可以像这样访问控制器和刀片文件上的变量:

dump(signedUser()['full_name']);

{{ signedUser()['full_name'] }}

答案 4 :(得分:-1)

您可以使用两种不同的方法将数据存储在会话中,方法是Request实例或使用提供的全局帮助程序/函数。

请求实例

public function methodA(Request $request) {
    $request->session()->put('KEY', 'VALUE');
}

全球助手

public function methodB() {
    session(['key' => 'value']);
}

您可以在documentation中找到有关这两种方法的更多详细信息。

相关问题