你们怎么解决Laravel中需要传入session_id的需求,也就是说一个域名同时登录两个帐号
比如说我要做一个功能,就是管理员后台弄一个一键登录
但是一键登录后,就换个帐号了,管理员变成没权限了
如果是原生PHP是可以传入session_id 到网址,但是在Laravel中就没有办法了
原理是一样的,何况laravel并没有禁止你用原生啊,你还是能用原生的。
这里不用原生也能实现,因我不知道你的登录态是采用哪种形式保存,就假设你是用session吧,这里可以写个简单示例给你参考:
代码有点粗糙,凑合看吧,主要是思路。
要换回原生要修改太多了
看了半天才明白楼主像表达啥... 是想管理员在后台用户列表页面,点击某一个用户,然后在浏览器新标签一键登陆该用户,是这个意思吗?
@GDDD 对的
但是这样有一个问题,就是管理员就退出了,相当于换了个用户了
如果都是后台用户的话 这个设定没问题 不能同时登陆两个
就是要解决这个问题,同时登录 要不然反复再登录后台,实在受不了
其实我觉得可以通过mac地址去做这样的功能,把改变session_id的条件换成判断mac地址,把所有用户弄个列表,双击进去就切换用户,完美解决你得问题吧
登录原理,服务端生成cookie保存到浏览器,客户端下次请求带上cookie来验证是否有效。后台保存到浏览器的cookie为user_token名字,前台保存到浏览器的cookie为member_token名字。保证了token不会被覆盖,session_id可以不用改,但会话数据结构必须为{“user”:管理员数据,”member”:前台成员数据, 其他数据…}这种json数据结构。
都是后台的用户就比较麻烦,如果是一个后台用户,一个前台用户,用不同的 session name 就可以了
管理端配置个域名,admin.xxx.com 在路由中指定domain 路由《Laravel 5.8 中文文档》 其实按理说前端和管理端是应该分开域名的
可以换个思路,不要想着保存两套 session,可以在超级管理员的 session 里加数据,表示一键登录了哪个账号,接口里或者中间件加个判断:超级管理员的 session 有指明一键登录了哪个账号,就当做账号切换了。 然后前端支持一下,在导航栏还是什么地方留个标识,点击后请求个接口,删了一键登录标识,即登录态返回到超级管理账号。
@xinhuo 我用户中心好多数据是根据Auth::user()-> id 获取的,如果这样改的话改动非常大,还有好多是Auth::user()->shops这样
同时登陆两个用户不合适吧,可以写个接口,参数是用户id,直接返回用户token,使用一个固定的密码验证身份,这个密码自己记好,不要泄露,然后前端请求接口后更新存储的token实现用户切换
其实可以换一个思路, 可以吧管理员分成超级管理员、普通管理员, 入口地址分别为
/superadmin
和/admin
给用户生成登录链接,让他用其他浏览器打开,就是其他用户的登录状态
我感觉你这是个伪需求,sessionid本来就是解决同一个浏览器只能有一个用户的,你可以换做传参形式,展示不同用户数据
guard不就能实现,后台是
admin
,前台是web
@Imuyu 这个思路有借鉴价值,打算试一下
@chutrue 两个guard这个思路可以考虑
如果需要保存用户登录的姓名或手机,但是又有两个Guard,那加个if判断一下?
换框架吧 github.com/lizhichao/one 支持自己生产session id
类似 viacreative/sudo-su 这种的吗?一键切换用户