Laravel 具有多个 table 会话集的多授权直到用户注销
Laravel Multi-Aiuth with multiple table session set till user logout
我在 laravel-4.2 中使用多个 table 实施了多重身份验证因此相应地我的登录视图发布了 3 个值,第一个是用户名,第二个是密码,第三个是下拉列表中的值这与 Auth::<3rd Value>()->attempt 具有相同的值,这有助于我使用请求的 table 登录,并假设如果第 3 个值为空,则 Auth::user()- >尝试开始使用。
对于多重身份验证,我正在使用 'ollieread' pakage
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('/'); }
}
});
UserController@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 以存储在会话中,这将帮助我知道用户来自 table,
登录后第一次重定向到 /desk,$model_name 显示正确的传递值,我通过
在桌面视图中检索值
<?php
$stream = Session::get('stream');
var_dump($stream);
?>
现在它转储通过重定向传递的正确值但是当我刷新页面时该值变为空值。
如果我可以设置这个值直到用户注销,这将有助于用 $stream 值注销。
也可用于:
Auth::$stream()->username
那么如何设置 session::get('stream') 值常量直到用户注销?
希望我解释正确。
为了存储会话值,您可以使用 laravel 4 的会话外观,如下所示:
//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()(可能在您的注销功能中使用)。您可能还想浏览 this page.
希望这能解决您的问题。如果没有,请告诉我。
我在 laravel-4.2 中使用多个 table 实施了多重身份验证因此相应地我的登录视图发布了 3 个值,第一个是用户名,第二个是密码,第三个是下拉列表中的值这与 Auth::<3rd Value>()->attempt 具有相同的值,这有助于我使用请求的 table 登录,并假设如果第 3 个值为空,则 Auth::user()- >尝试开始使用。 对于多重身份验证,我正在使用 'ollieread' pakage 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('/'); }
}
});
UserController@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 以存储在会话中,这将帮助我知道用户来自 table,
登录后第一次重定向到 /desk,$model_name 显示正确的传递值,我通过
在桌面视图中检索值<?php
$stream = Session::get('stream');
var_dump($stream);
?>
现在它转储通过重定向传递的正确值但是当我刷新页面时该值变为空值。
如果我可以设置这个值直到用户注销,这将有助于用 $stream 值注销。
也可用于:
Auth::$stream()->username
那么如何设置 session::get('stream') 值常量直到用户注销? 希望我解释正确。
为了存储会话值,您可以使用 laravel 4 的会话外观,如下所示:
//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()(可能在您的注销功能中使用)。您可能还想浏览 this page.
希望这能解决您的问题。如果没有,请告诉我。