美文网首页Laravel开发实践Laravel
Laravel 用户授权登录(QQ用户,微博用户,微信用户)

Laravel 用户授权登录(QQ用户,微博用户,微信用户)

作者: ONEDAYLOG | 来源:发表于2017-12-22 11:41 被阅读111次

简介

socialit 可用GoogleFacebookLinkedin微博QQ微信公众平台微信开放平台豆瓣
laravel-socialit上面那个的扩展,可以在Laravel中使用

我们的应用与使用 OAuth 标准的第三方应用的交互流程一般是这样的:
  • 展示跳转到第三方应用登录的链接
  • 用户点击链接跳转到第三方应用登录并进行授权
  • 在用户授权后第三方应用会跳转到我们所指定的应用回调资源地址并伴随用于交互 AccessToken 的 Code
  • 我们的应用拿到 Code 后自主请求第三方应用并使用 Code 获取该用户的 AccessToken
  • 获取 AccessToken 之后的应用即可自主的从第三方应用中获取用户的资源信息
Laravel Socialite UML
1821058-76b792e3240cadbe.jpg

安装 Laravel Socialite

用composer安装

$ composer require "overtrue/laravel-socialite:~1.0"

配置

你需要在 config/app.phpproviders 键中追加:

 Overtrue\LaravelSocialite\ServiceProvider::class,

aliases中追加

'Socialite' => Overtrue\LaravelSocialite\Socialite::class,

config/services.php 配置文件中添加驱动器配置项:

    'github' => [
        'client_id'     => 'your-app-id',
        'client_secret' => 'your-app-secret',
        'redirect'      => 'http://localhost/socialite/callback.php',
    ],

    'weibo' => [
        'client_id'     => 'your-app-id',
        'client_secret' => 'your-app-secret',
        'redirect'      => 'http://localhost/socialite/callback.php',
    ],
    'qq' => [
        'client_id'     => 'your-app-id',
        'client_secret' => 'your-app-secret',
        'redirect'      => 'http://localhost/socialite/callback.php',
    ],

使用

添加好路由

    Route::any('/oauth/qq', 'User\UserIndexController@qqRedirect');
    Route::any('/oauth/qq/callback', 'User\UserIndexController@qqCallback');

    Route::any('/oauth/weibo', 'User\UserIndexController@weiboRedirect');
    Route::any('/oauth/weibo/callback', 'User\UserIndexController@weiboCallback');

创建好对应的控制器然后写调用方法,我这边授权后将用户信息判断是否已经绑定用户,没有的话就存到session中,完成注册后保存用户,存在的话直接登录用户。

    public function qqRedirect()
    {
        return Socialite::driver('qq')->redirect();
    }

    public function qqCallback()
    {
        $user = Socialite::driver('qq')->user();

        $userQQ =  UniUserQq::where('id',$user->getId())->first();

        if($userQQ){

            $uniUser = UniUser::where('ID',$userQQ->user_id)->first();

            $this->guard()->login($uniUser);

            return redirect('/user/login');
        }else{

            $userQQ = new  UniUserQq();
            $userQQ->id = $user->getId();
            $userQQ->unionid = $user->getAttributes()['unionid'];
            $userQQ->nickname = $user->getNickname();
            $userQQ->name = $user->getName();
            $userQQ->email = $user->getEmail();
            $userQQ->avatar = $user->getAvatar();
            $userQQ->gender = $user->getOriginal()['gender'];
            $userQQ->province = $user->getOriginal()['province'];
            $userQQ->city = $user->getOriginal()['city'];
            $userQQ->year = $user->getOriginal()['year'];

            session(['userAuth'=>$userQQ]);

            $this->redirectReg($user->getNickname());

        }


    }

    public function weiboRedirect()
    {
        return Socialite::driver('weibo')->redirect();
    }

    public function weiboCallback()
    {
        $user = Socialite::driver('weibo')->user();

        $userWeibo =  UniUserWeibo::where('id',$user->getId())->first();

        if($userWeibo){

            $uniUser = UniUser::where('ID',$userWeibo->user_id)->first();

            $this->guard()->login($uniUser);

            return redirect('/user/login');
        }else{
            $userWeibo = new  UniUserWeibo();
            $userWeibo->id = $user->getOriginal()['id'];
            $userWeibo->idstr = $user->getOriginal()['idstr'];
            $userWeibo->class = $user->getOriginal()['class'];
            $userWeibo->screen_name = $user->getOriginal()['screen_name'];
            $userWeibo->name = $user->getOriginal()['name'];
            $userWeibo->location = $user->getOriginal()['location'];
            $userWeibo->url = $user->getOriginal()['url'];
            $userWeibo->avatar = $user->getOriginal()['avatar_large'];
            $userWeibo->gender = $user->getOriginal()['gender'];
            $userWeibo->domain = $user->getOriginal()['domain'];
            $userWeibo->remark = $user->getOriginal()['remark'];

            session(['userAuth'=>$userWeibo]);

           return $this->redirectReg($user->getNickname());

        }
    }

注:授权的回调URL都需要设定为你需要回调的域名地址中,不然回调授权后无法跳回页面

qq.png qq.png image.png

相关文章

网友评论

    本文标题:Laravel 用户授权登录(QQ用户,微博用户,微信用户)

    本文链接:https://www.haomeiwen.com/subject/rtqtgxtx.html