第三方登录最佳实践
打赏作者

chenxin

问一个问题!当用第三方登录的时候第一次登陆进去,数据插入到数据库了,那么第二次登陆就会出现数据已存在,如果在插入之前判断这个email是否存在,然后进行跳转还是插入跳转的话,是否可以接解决?您的网站的github登陆是否是这样的逻辑!

JellyBool 回复 chenxin

恩,可以的。其实更准确的判断是根据 social_type 和 social_id 来判断,因为 email 有可能会变。

chenxin 回复 JellyBool

刚刚实现了!根据你的提示再改改! thank you!

chenxin 回复 JellyBool

social_type和 social_id 是指什么?
$socliate->driver('github')->user()
返回的数组中间有一个 “id” => 16264254是指这个么?

JellyBool 回复 chenxin

我的意思是 users 表会有 social_type 和 social_id 这两个字段。比如 github 登录的时候,social_type 就是 github,social_id 就是 github 的用户id,微博登录的时候,social_type 就是 weibo,social_id 就是微博的用户id,这样只是为了保证用户的记录是唯一的而已

Gavin1024

就是说实现第三方登录时users表增加两个字段social_type和social_id来便于存储用户信息 这么说也就间间接性的注册了一个用户 而用户的其他字段都是空喽?

JellyBool 回复 Gavin1024

其实 oauth 的主要过程就是按到用户的一些公用信息吧,比如 email 和头像地址等,其目的都是为了方便用户在使用网站服务的时候,不用填写邮箱和一些其他的信息吧。至于一些其他的字段,如果没有的话,就是默认值,用户可以在自己的 profile 页面添加。

dppppp

请问一下老师 如果我在网站上用email注册过一遍 然后用github登陆的时候 github的邮箱是一样的 那么这样是要把邮箱设置成不唯一吗?

JellyBool 回复 dppppp

我觉得邮箱还是唯一的好一点,如果说 github 登录的邮箱一致的话,可以直接去绑定

yansudong

老师,我在用你的写法到这的时候 $socialite=new SocialiteManager(config(‘services’));
return $socialite->driver(‘github’)->redirect(); 提示我 Undefined index: config 这是为什么?

JellyBool 回复 yansudong

检查哪里的数组有用到类似 config 的key的