付费课程, 订阅后即可观看

实现跨站自动登录之共享用户体系

本期Laravel视频教程我们正式开始跨站自动登录的实现过程,第一步就是不同网站间共享用户系统,共享用户系统就是共享数据库的用户表格,让不同的网站的User Model关联表格的时候关联同一个数据库的用户表,如此一来,就可以完成第一步的准备工作

running8 2019.08.15 14:26

protected $connection=

灵活定义控制器的数据库,这么简单啊

实用,期待下集.....

anyouzy 2020.07.19 12:45

看了视频,自己动手实践了一下,真心心累。发现以下几点与君共享: 1. 子站可以不用执行migrate命令生成一些数据表,因为共享主站的用户系统。 2. 如果要修改登录的逻辑判断,可以在LoginController中增加credentials方法,比如除了用户名和密码正确,我还需要验证用户表的is_active字段值为‘yes’,主站和子站都需要加: public function credentials(Request $request) { $credentials = $request->only($this->username(), 'password'); $credentials['is_active'] = 'yes'; return $credentials; }

2. 重置密码要想生效,记得在子站auth.php中password数组配置中增加一个connection=>'主站数据库连接',目的是去操作主站的password_reset。 3. 如果使用redis作为session驱动,主站和子站的app_key和app_name都要保持一致,否则redis会生成两份session数据。

国营 2020.07.19 15:27

哈哈哈,这不是解决了吗,解决了之后你就发现没啥难的,就那么几句代码就得了,只是探索的时候肯定花一些时间和精力,但是是值得的

anyouzy 2020.07.19 16:50

汗。。。确实是这样子,不过这下对于同域名下的跨站登录了解清楚了。顺便再补充一点:

4. 使用redis作为session存储介质的时候,主站和子站需要注意redis key的前缀问题。两者需要保持一致,可选择直接把各个站点cofig/database.php中redis配置项prefix注释掉。

网站主,空了能录制个php或者laravel的单点登录方案不,不仅仅是同域。目前这块好像没有很成熟的解决方案。

Yolver 2022.03.23 14:18

Api开发,使用redis作为session存储,主站和子站都将redis配置项的prefix注释掉了,但是redis key还是存在不一致的问题(生成了两条数据),一个是(laravel_cache)另一个是(laravel_cache_),有点不明白这个机制是咋回事了。想请教下是什么问题,使用的是laravel 9.5。

国营 2022.03.23 14:41

看上面的评论吧,你会找到答案的

Yolver 2022.03.24 09:56

已仔细阅读上面评论,并重新进行了尝试。 在实操中,session存储改为redis,session主域名一致,APP_NAME与APP_KEY一致,子站获取主站数据库的user表,redis配置相同并注释掉prefix前缀,都同时在api中间件组中开启StartSession中间件。测试流程为在主站登录用户生成session并通过token调用主站获取用户接口->子站使用主站token进行获取用户信息操作。测试结果如下: 1、laravel8.x 能够成功获取,redis中的session一致 2、laravel9.x不能够获取,原因:redis中session的key值不一致,主站为(laravel_cache:xxxxxx),子站为(laravel_cache_:xxxxxx),两者加密信息一致,key值相差一个下划线(_)

思考:会不会是laravel9中的相关内容进行了更改导致与laravel8及以下版本的测试结果不一致?

国营 2022.03.24 12:52

看来得朋友先探索一下了,新版本我的确没试过。有了解答我收割一下劳动成果

Yolver 2022.03.25 07:21

问题已解决! 问题原因:主项目是laravel9.x刚出的时候创建的,子项目是laravel9.5发布后创建的项目,两者的config/cache.php文件中的prefix有一个下划线的差异,具体修改在github的laravel/laravel项目中(#5817)commit中,应该是在9.2或9.5发布时更改的。 解决思路:因为两个项目在redis中体现的差异在于一个下划线,所以首先在两个项目中全文搜索 cache_ 关键字发现子项目config/cache.php中的prefix多出来了一个下划线,尝试删除后redis key就统一了。因为如果只注释掉redis的prefix还是会有cache的prefix作为redis key,所以也需要注意这里的前缀。

国营 2022.03.25 07:31

非常帅气,感谢朋友的探索,没先到都 9.5 了。也不知道又引入了啥

微信扫码登录