在Laravel 5.3中构建应用程序,其中一项功能是让管理员能够以用户身份登录应用程序,以便能够查看特定用户可以看到的内容,同时保持其管理员会话能够返回到用户列表,可以作为另一个用户登录,而无需重新进行身份验证 .
目前实现了基本的开箱即用的Laravel Auth,这意味着如果我启动另一个auth会话,它将终止我的管理会话,使我不得不重新登录 .
我检查了Laravel Multi Auth但似乎使用了两个表(用户,管理员),在我的例子中,我们使用一个用户表并使用ACL管理角色并决定管理员和用户 .
你们对这个解决方案有什么编程逻辑思路?试图找到关于如何在Laravel 5.x中实现这一点的其他意见/想法
3 回答
你确定你真的要登录吗?我会保持以管理员身份登录并模拟用户登录 . 您可以允许管理员访问所有数据库 . 在您的控制器中,您可以使用
User::find($user_id)
而不是Auth::user()
来访问用户的数据 .https://laravel.com/docs/5.3/database
https://laravel.com/docs/5.3/eloquent
我最近在一个项目上实现了这个功能 . 我使用会话和中间件做到了这一点 . 我就这样做了:
impersonateIn
和impersonateOut
设置两个路由 .ImpersonateController@impersonateIn
方法中,只需将要登录的用户ID和URL backUrl设置为会话变量 .第一部分完成了 . 现在每个请求都需要检查会话是否设置了
impersonated
变量 . 一个好的地方是中间件 .impersonated
,则仅以当前请求使用Auth::onceUsingId()
的用户身份登录 .impersonateOut
. 现在,从用户注销的管理员将被重定向到旧路由 . 而已!Personaly,我会用会话这样做 . 我没有使用Laravel,但我经常使用PHP,所以我的答案将在PHP中 .
在 Headers 页中,您最有可能进行某种会话检查以查看用户是否已登录 . 例如:
我会改变这样的:
在您交换用户的页面中,您只需复制用户登录时会话启动的方式 . 要切换用户,您将销毁新的“fakeuser”并返回旧的会话管理员权限而无需登录又回来了 .
无论如何,这是我会采取的合乎逻辑的方法 .