【问题标题】:Laravel Multi-Aiuth with multiple table session set till user logoutLaravel Multi-Aiuth 设置了多个表会话,直到用户注销
【发布时间】:2016-07-14 09:07:20
【问题描述】:

我在 laravel-4.2 中使用多个表实现了多重身份验证,因此我的登录视图发布了 3 个值,第一个是用户名,第二个是密码,第三个是下拉列表中的值,与 Auth::()->尝试,这有助于我使用请求的表登录,并假设如果第三个值为空,则使用 Auth::user()->尝试。 对于多重身份验证,我正在使用“ollieread”包 Auth实现代码是

auth.php:

    <?php
return array(
    'multi' => array(
        'BSc' => array(
            'driver' => 'database',
             'table' => 'bsc',
            'model' => 'BSc'
        ),
        'user' => array(
            'driver' => 'eloquent',
            'model' => 'User',
            'table' => 'users'
        )
    ),
    'reminder' => array(
        'email' => 'emails.auth.reminder',
        'table' => 'password_reminders',
        'expire' => 60,
    ),
);

过滤器中的编辑:

    Route::filter('students', function()
{
    if (Auth::BSc()->guest())
    {
        if (Request::ajax())
        {
            return Response::make('Unauthorized', 401);
        }
        else
        {
return Redirect::guest('/');    }
    }
});

Route::filter('auth.basic', function()
{
    if (Auth::user()->guest())
    {
        if (Request::ajax())
        {
            return Response::make('Unauthorized', 401);
        }
        else
        {
return Redirect::guest('/');    }
    }
});

用户控制器@postLogin:

 public function postLogin()
 {
  $username = Input::get('username');
  $model_name = Input::get('course');
  $password = Input::get('password'),

  $credentials = array(
    'username'    => $username,
    'password' => $password,
  );

   //class exists(Model exist?)
   if(!(is_null($model_name))){
    if(class_exists($model_name)){
     if(Auth::$model_name()->attempt($credentials))
     {
       return Redirect::to('desk')->with('stream',$model_name);
     }
    else
     {
       echo "Invalid UserName";   
     }   
   }else{
     echo "No model is created for ".$model_name;
   }
   }else{
     if(Auth::user()->attempt($credentials)){
      return Redirect::intended('desktop')->with('stream',"Test");
     }
     else{
      echo "Username is invalid";     
      }
   }

在 postLogin 函数中,在重定向到路由“desk”时,我将变量 $model_name 传递给存储在会话中,这将帮助我知道用户来自哪个表,

第一次在登录后重定向到 /desk 时,$model_name 显示了正确的传递值,我在桌面视图中检索该值,

<?php
$stream = Session::get('stream');
var_dump($stream);   
?>

现在它转储了通过重定向传递的正确值但是当我刷新页面时,该值变为 null。

如果我可以设置这个值直到用户注销,那么使用 $stream 值注销会有所帮助。

也可用于:

Auth::$stream()->username

那么如何在用户注销之前设置 session::get('stream') 值常量? 希望我的解释正确。

【问题讨论】:

  • 如果你只需要存储一个 Session 值,你可以使用 Session::put。
  • 是的,我没有得到正确的方法,我应该如何将变量放入会话并重定向到 /desk。
  • 对。你也可以给我看看你的注销功能吗?
  • 我已经这样做了 $stream = Session::put('stream','myValue');我刚刚通过了它 return Redirect::to('desk')->with($stream);直到用户注销,它就完成了
  • 我想看看你的注销功能。无论如何,我试图回答你的问题。请看一下并告诉我。

标签: authentication laravel-4 session-variables


【解决方案1】:

为了存储会话值,您可以使用 laravel 4 的 Session 门面,如下所示:

//class exists(Model exist?)

   if(!(is_null($model_name))){
    if(class_exists($model_name)){
     if(Auth::$model_name()->attempt($credentials))
     {
       Session::put('stream', $model_name);
       return Redirect::to('desk');
     }
    else
     {
       echo "Invalid UserName";   
     }   
   }else{
     echo "No model is created for ".$model_name;
   }
   }else{
     if(Auth::user()->attempt($credentials)){
      return Redirect::intended('desktop')->with('stream',"Test");
     }
     else{
      echo "Username is invalid";     
      }
   }

在您使用 Session::forget('key') 或 Session::flush() (可以在您的注销功能中使用)之前,该值会以名称(键)'stream' 保留在会话中。您可能还想通过this page

我希望这能解决您的问题。如果没有,请告诉我。

【讨论】:

    猜你喜欢
    • 2016-07-13
    • 2017-04-07
    • 2011-12-17
    • 2018-03-01
    • 1970-01-01
    • 2016-09-23
    • 2021-12-09
    • 2013-10-14
    • 1970-01-01
    相关资源
    最近更新 更多