您的位置:首页 > 其它

第三方登录的具体实现(不依赖于框架 )

2018-03-13 11:51 411 查看
官方包地址  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
         如果已经插入了 则跳转登录
        否则  插入登录,插入的信息根据个人需要删减
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: 
相关文章推荐