你们怎么解决Laravel中需要传入session_id的需求,也就是说一个域名同时登录两个帐号

比如说我要做一个功能,就是管理员后台弄一个一键登录

但是一键登录后,就换个帐号了,管理员变成没权限了

如果是原生PHP是可以传入session_id 到网址,但是在Laravel中就没有办法了

《L03 构架 API 服务器》
你将学到如 RESTFul 设计风格、PostMan 的使用、OAuth 流程,JWT 概念及使用 和 API 开发相关的进阶知识。
《G01 Go 实战入门》
从零开始带你一步步开发一个 Go 博客项目,让你在最短的时间内学会使用 Go 进行编码。项目结构很大程度上参考了 Laravel。
讨论数量: 23

原理是一样的,何况laravel并没有禁止你用原生啊,你还是能用原生的。
这里不用原生也能实现,因我不知道你的登录态是采用哪种形式保存,就假设你是用session吧,这里可以写个简单示例给你参考:

<?php

/**
 * 通过已登录用户,切换到其他用户
 * 
 * @param  string $account 要登录的新用户
 * @return [type]          [description]
 */
public function loginToOtherAccount($account)
{
    if (!session('admin_id')) {
        throw new Exception("没有权限,请先登录");
    }
    // 查询新用户
    $new_user = DB::table()->where('account', $account)->first();
    // 覆盖旧session
    session('admin_id', $new_user['id']);
    return true;
}

代码有点粗糙,凑合看吧,主要是思路。

2年前 评论
LiamHao 2年前
忆往昔弹指间 (作者) 2年前
LiamHao 2年前

要换回原生要修改太多了

2年前 评论
GDDD

看了半天才明白楼主像表达啥... 是想管理员在后台用户列表页面,点击某一个用户,然后在浏览器新标签一键登陆该用户,是这个意思吗?

2年前 评论

@GDDD 对的

2年前 评论
GDDD 2年前

但是这样有一个问题,就是管理员就退出了,相当于换了个用户了

2年前 评论
陈先生

如果都是后台用户的话 这个设定没问题 不能同时登陆两个

2年前 评论

就是要解决这个问题,同时登录 要不然反复再登录后台,实在受不了

2年前 评论

其实我觉得可以通过mac地址去做这样的功能,把改变session_id的条件换成判断mac地址,把所有用户弄个列表,双击进去就切换用户,完美解决你得问题吧

2年前 评论

登录原理,服务端生成cookie保存到浏览器,客户端下次请求带上cookie来验证是否有效。后台保存到浏览器的cookie为user_token名字,前台保存到浏览器的cookie为member_token名字。保证了token不会被覆盖,session_id可以不用改,但会话数据结构必须为{“user”:管理员数据,”member”:前台成员数据, 其他数据…}这种json数据结构。

2年前 评论

都是后台的用户就比较麻烦,如果是一个后台用户,一个前台用户,用不同的 session name 就可以了

2年前 评论
meooo 2年前
xiaopi

管理端配置个域名,admin.xxx.com 在路由中指定domain 路由《Laravel 5.8 中文文档》 其实按理说前端和管理端是应该分开域名的

2年前 评论

可以换个思路,不要想着保存两套 session,可以在超级管理员的 session 里加数据,表示一键登录了哪个账号,接口里或者中间件加个判断:超级管理员的 session 有指明一键登录了哪个账号,就当做账号切换了。 然后前端支持一下,在导航栏还是什么地方留个标识,点击后请求个接口,删了一键登录标识,即登录态返回到超级管理账号。

2年前 评论

@xinhuo 我用户中心好多数据是根据Auth::user()-> id 获取的,如果这样改的话改动非常大,还有好多是Auth::user()->shops这样

2年前 评论
xinhuo 2年前

同时登陆两个用户不合适吧,可以写个接口,参数是用户id,直接返回用户token,使用一个固定的密码验证身份,这个密码自己记好,不要泄露,然后前端请求接口后更新存储的token实现用户切换

2年前 评论
随波逐流

其实可以换一个思路, 可以吧管理员分成超级管理员、普通管理员, 入口地址分别为 /superadmin/admin

// Authentication Guards
'guards' => [
    'superadmin' => [
        'driver'   => 'session',
        'provider' => 'admin',
    ],
    'admin' => [
        'driver'   => 'session',
        'provider' => 'admin',
    ]
]
2年前 评论

给用户生成登录链接,让他用其他浏览器打开,就是其他用户的登录状态

2年前 评论

我感觉你这是个伪需求,sessionid本来就是解决同一个浏览器只能有一个用户的,你可以换做传参形式,展示不同用户数据

2年前 评论

guard不就能实现,后台是admin,前台是web

2年前 评论

@Imuyu 这个思路有借鉴价值,打算试一下

2年前 评论

@chutrue 两个guard这个思路可以考虑

2年前 评论

如果需要保存用户登录的姓名或手机,但是又有两个Guard,那加个if判断一下?

2年前 评论

换框架吧 github.com/lizhichao/one 支持自己生产session id

2年前 评论

类似 viacreative/sudo-su 这种的吗?一键切换用户

2年前 评论

讨论应以学习和精进为目的。请勿发布不友善或者负能量的内容,与人为善,比聪明更重要!