官方包地址 https://packagist.org/packages/overtrue/socialite
场景:
laravel项目第三方登录可以使用 laravel/socialite
不限制框架的第三方包 overtrue/socialite
使用方法:
1. 准备工作
composer require "overtrue/socialite"
github申请oauth Apps
2. web需要生成两个函数
触发Oauth认证的函数:
/** * github 跳转认证的入口 * @return \Symfony\Component\HttpFoundation\RedirectResponse */ public function githubLogin() { $socialite = new SocialiteManager(config('services')); return $socialite->driver('github')->redirect(); }
Oauth返回进行逻辑处理的函数
/** * github callback */ public function githubCallback() { // oauth $socialite = new SocialiteManager(config('services')); $user = $socialite->driver('github')->user(); // register for the first time or not base on social_type and social $social_type = strtolower($user->getProviderName()); $social_id = $user->getId(); $web_user = \App\User::where(compact('social_id', 'social_type'))->first(); if (!$web_user) { // register data $params = [ 'name' => $user->getNickname(), 'email' => $user->getEmail(), 'password' => bcrypt(str_random(16)), 'confirm_code' => bcrypt(str_random(32)), 'avatar' => $user->getAvatar(), 'is_confirmed' => 1, 'social_id' => $social_id, 'social_type' => $social_type ]; $web_user = \App\User::create($params); } // login \Auth::login($web_user); // 跳转到登陆之前的页面 if (\Session::has('redirect_url')) { $redirect_url = \Session::get('redirect_url'); \Session::forget('redirect_url'); return redirect($redirect_url); } return redirect('/'); }
注意:
1. callback
注册Oauth Apps的 callback url 非常重要 (oauth完成验证后 调用的url)
会和Web传递的url 对比,需要完全一致
2. social_type social_id
逻辑: 判断唯一性的依据是 oauth privider_name and oath id
如果已经插入了 则跳转登录
否则 插入登录,插入的信息根据个人需要删减