Laravel开发实践Laravel

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

2017-12-22  本文已影响111人  ONEDAYLOG

简介

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

我们的应用与使用 OAuth 标准的第三方应用的交互流程一般是这样的:
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
上一篇 下一篇

猜你喜欢

热点阅读