在Laravel 5.3中构建一个应用程序,其中一个功能是让管理员能够以用户身份登录到应用程序,能够看到特定用户可以看到的内容,同时维护他的管理会话,以便能够返回到用户列表,并且能够以另一个用户的身份登录,而无需重新验证。
目前实现了基本的开箱即用的Laravel身份验证,这意味着如果我启动另一个身份验证会话,它将终止我的管理会话,使我不得不重新登录。
我检查了Laravel Multi Auth,但似乎使用两个表( user,admin),在我的例子中,我们使用一个用户表,并使用ACL来管理角色和决定谁是admin,谁是用户。
你们对这个解决方案有什么编程逻辑的想法?尝试寻找如何在Laravel 5.x中实现此功能的其他观点/想法
发布于 2017-11-30 03:39:22
我最近在一个项目中实现了这个特性。我使用会话和中间件实现了这一点。我是这样做的:
impersonateIn和impersonateOut设置两个路由。Route::get('impersonateIn/{ user }','ImpersonateController@impersonateIn');Route::get('impersonateOut','ImpersonateController@impersonateOut');
ImpersonateController@impersonateIn方法只需设置要登录的用户id和backUrl到会话变量中。公共函数impersonateIn($id) { session('impersonated‘=> $id,'backUrl’=> \URL::previous());return redirect()->to('dashboard');}公共函数impersonateOut() { $back_url = Request::session()->get('backUrl');Request::session()->forget('impersonated','secretUrl');返回$back_url?redirect()->to($back_url):redirect()->to('dashboard');}
第一部分已经完成。现在,每个请求都需要检查会话是否设置了impersonated变量。一个很好的地方就是中间件。
impersonated,则仅以使用当前请求的Auth::onceUsingId()的用户身份登录。ImpersonateMiddleware { public function handle($request,Closure $next) { if( request ::session()->has('impersonated')) {$request}
protected $middlewareGroups =[ 'web‘=> //....\App\Http\Middleware\ImpersonateMiddleware::class,,];
impersonateOut的注销路由。现在,当管理员从用户注销时,将重定向到旧路由。就是这样!发布于 2016-09-07 01:28:49
您确定真的要登录吗?我将保持以管理员身份登录,并模拟用户登录。您可以允许管理员访问所有数据库。在您的控制器中,您可以使用User::find($user_id)而不是Auth::user()来访问用户数据。
发布于 2016-09-06 22:24:11
就我个人而言,我会用会话来做这件事。我没有使用过Laravel,但我经常使用PHP,所以我的答案是PHP。
在标题页中,您很可能有某种类型的会话检查,以查看用户是否已登录。例如:
<? php
session_start();
if (isset($_SESSION['user'])){
//do stuff with the user session
} else {
die('User not logged in!');
}
?>我会将其更改为类似以下内容:
<? php
session_start();
if (isset($_SESSION['fakeuser'])){
//do stuff with the user session
//change logout button to destroy this session instead of logging the user out
}
elseif (isset($_SESSION['user'])){
//do stuff with the user session
} else {
die('User not logged in!');
}
?>在交换用户的页面中,只需复制用户登录时启动会话的方式即可。要切换用户,您需要销毁新的'fakeuser‘,并且您将返回到旧的session + admin权限,而不必再次登录。
这是我无论如何都会采取的合乎逻辑的方法。
https://stackoverflow.com/questions/39351025
复制相似问题