php – Laravel 5.0 multiauth
发布时间:2020-12-14 19:56:03 所属栏目:大数据 来源:网络整理
导读:我有一个应用程序,它有两个部分后端和前端.在后端管理员可以登录,在前端客户端可以登录.现在它已经实现.所有应用程序的查询都是通过管理员和客户端的登录用户ID完成的. 现在我的应用程序需要一个功能,管理员可以查看客户端数据,就像客户端看到他们的个人资料
我有一个应用程序,它有两个部分后端和前端.在后端管理员可以登录,在前端客户端可以登录.现在它已经实现.所有应用程序的查询都是通过管理员和客户端的登录用户ID完成的.
现在我的应用程序需要一个功能,管理员可以查看客户端数据,就像客户端看到他们的个人资料一样.客户端有很多东西.我可以使用Auth :: loginUsingId($client_id).这里客户端配置文件显示完美,但管理员登录会话按预期丢失. 管理员登录时如何实现这一点,管理员可以查看客户端的完整数据?
让我介绍一种最简单的登录方式作为客户端功能.首先,定义asuser和returnback路由.
路线和行动 Route::get('/asuser/{user}','AdminController@asuser') ->where('user','[0-9]+') ->name('asuser'); Route::get('/returnback','ClientController@returnback') ->name('returnback'); 在管理员的控制器中: public function asuser(User $client,Request $request) { /* insert checking if user has right either here with some field * like $user->is_admin or using middleware settings and Policy */ # who user is $fromId = Auth::user()->getId(); # logging as a client Auth::login($client,true); # but keeping admin in a session $request->session()->put('adm_id',$fromId); return redirect()->route('some-client-route') ->with('status','You are logged in as a client'); } 并返回ClientController public function returnback(Request $request) { $fromId = Auth::user()->getId(); # getting admin id $admId = $request->session()->pull('adm_id'); $adminUser = User::find($admId); if (!$adminUser) { return redirect()->back() ->with('status','Not allowed'); } # logging out as a client and logging in as admin Auth::logout(); Auth::login($adminUser,true); return redirect()->route('some-admin-route') ->with('status','Welcome back!'); } 它准备好生产了吗? 不,这不对.这不是一个很好的解决方案,只是一瞥如何使用它.会话有生命周期,所以如果管理员在其生命周期中没有返回,session variables are lost并且他成为一个客户端(如果记住我= true,就像上面的代码一样).您可以将值存储在会话中但不存储在数据库列中. 此外,正如t1gor所提到的,您必须注意以下事实:当管理员是客户端时,您无法记录客户端的操作并发送事件.这是作为客户端登录的最严重问题.无论如何,我想,解决这个问题要比将所有auth逻辑移出视图更容易. 好吧,希望它有所帮助. (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |