社交媒体登录认证提供者大全 —— Socialite Providers,支持微博、微信、QQ等

社交媒体登录

1、简介

Socialite Providers是一个扩展自Laravel SocialiteOAuth 1 & 2 包集合。

其中的Manager包使用观察者模式来扩展Socialite,这种机制允许除了Laravel Socialite提供的认证提供者之外的多个其它提供者被使用,且只有添加到监听器的提供者被使用。

2、GitHub

https://github.com/SocialiteProviders

3、优点

  • 可以访问Manager加载的所有认证提供者
  • 直到Socialite被调用时提供者才会实例化
  • 支持覆盖当前认证提供者
  • 支持创建新的认证提供者

4、认证提供者

目前Socialite Providers支持使用83种社交媒体进行第三方登录认证:

5、使用示例

新浪微博(Weibo)

使用如下Composer命令安装依赖:

composer require socialiteproviders/weibo

注册服务提供者(同时注释掉原有的Socialite提供者):

//Laravel\Socialite\SocialiteServiceProvider::class,
SocialiteProviders\Manager\ServiceProvider::class,

添加Socialite门面(如果已有略过本操作):

'Socialite' => Laravel\Socialite\Facades\Socialite::class,

添加事件监听器(App/Providers/EventServiceProvider):

protected $listen = [
    'SocialiteProviders\Manager\SocialiteWasCalled' => [
        'SocialiteProviders\Weibo\WeiboExtendSocialite@handle',
    ],
];

去新浪微博开放平台(http://open.weibo.com/)创建一个新的网站应用以获取相应的App Key和App Secret。需要注意的是不比GitHub,新浪微博需要创建的网站应用对应网站在外网可以访问。

然后在配置文件app/services.php中添加weibo配置项:

'weibo' => [
    'client_id' => 'your weibo app App Key',
    'client_secret' => 'your weibo app App Secret',
    'redirect' => 'http://laravel.app:8000/auth/weibo/callback'
]

接下来我们要对AuthController略作修改:

public function redirectToProvider(Request $request,$service)
{
    return Socialite::driver($service)->redirect();
}

public function handleProviderCallback(Request $request,$service)
{
    $user = Socialite::driver($service)->user();
    dd($user);
}

以支持多种不同认证提供者的切换。

最后需要修改认证路由规则如下:

Route::get('auth/{service}', 'Auth\AuthController@redirectToProvider');
Route::get('auth/{service}/callback', 'Auth\AuthController@handleProviderCallback');

至此就可以在浏览器中访问http://laravel.app:8000/auth/weibo进行测试了。

微信QQ及其它社交媒体第三方登录认证与此类似,不再赘述。

学院君 has written 715 articles

资深PHP工程师,Laravel学院院长

27 thoughts on “社交媒体登录认证提供者大全 —— Socialite Providers,支持微博、微信、QQ等

  1. 书生 says:

    各位如果是按照学院君的配置的话是没问题的,出现
    Driver [weixin] not supported.
    Driver [qq] not supported.
    Driver [callback] not supported.
    这几种情况的,一定是.env文件中的回调地址配置错误

    学院君给出的 app/services.php 文件也可以写成这样
    ‘qq’ => [
    ‘client_id’ => env(‘QQ_KEY’),
    ‘client_secret’ => env(‘QQ_SECRET’),
    ‘redirect’ => env(‘QQ_REDIRECT_URI’),
    ],
    ‘weibo’ => [
    ‘client_id’ => env(‘WEIBO_KEY’),
    ‘client_secret’ => env(‘WEIBO_SECRET’),
    ‘redirect’ => env(‘WEIBO_REDIRECT_URI’),
    ],

    然后在 .env 文件中这样写

    QQ_KEY= 你的qq互联 APP ID
    QQ_SECRET=你的qq互联 APP Key
    QQ_REDIRECT_URI= http://jingying.cn/auth/qq/callback

    WEIBO_KEY=微博App Key
    WEIBO_SECRET=微博App Secret
    WEIBO_REDIRECT_URI=http://jingying.cn/auth/weibo/callback

    上面两个的url中的jingying.cn是我本地项目的访问地址,你们替换掉可以,这整个url就是你需要配置的回调地址,这个回调地址必须和你在 qq/weibo 开放平台上写的回调地址一样

    1. 书生 says:

      EventServiceProvider文件是这样的

      protected $listen = [
      ‘App\Events\SomeEvent’ => [
      ‘App\Listeners\EventListener’,
      ],
      ‘SocialiteProviders\Manager\SocialiteWasCalled’ => [
      ‘SocialiteProviders\Qq\QqExtendSocialite@handle’,
      ‘SocialiteProviders\Weibo\WeiboExtendSocialite@handle’
      ],
      ];

    1. 书生 says:

      您好,我配置的事qq和微博登录同时有的
      EventServiceProvider这个文件我是这样配置的:
      protected $listen = [
      ‘App\Events\SomeEvent’ => [
      ‘App\Listeners\EventListener’,
      ],
      ‘SocialiteProviders\Manager\SocialiteWasCalled’ => [
      ‘SocialiteProviders\Qq\QqExtendSocialite@handle’,
      ‘SocialiteProviders\Weibo\WeiboExtendSocialite@handle’
      ],
      ];
      路由是这样的:
      Route::get(‘auth/{service}’, ‘Lifeadmin\LoginController@redirectToProvider’);
      Route::get(‘auth/{service}/callback’, ‘Lifeadmin\LoginController@handleProviderCallback’);

      控制器是这样的:
      public function redirectToProvider(Request $request,$service)
      {
      return \Socialite::with($service)->redirect();
      }

      public function handleProviderCallback(Request $request,$service)
      {
      $user = \Socialite::with($service)->user();
      dd($user);
      }

      但是配置好之后总是报这个错误,访问QQ登录页是可以的,但是登陆之后就报下面的错误,微博也是这个错
      Driver [callback] not supported.

      您能指点一下吗,拜谢,^_^

        1. 书生 says:

          有的,这些都配置了,我怀疑是我的回调地址有问题,但又不知道该怎么处理,如果注释掉其中一种登录,另一个就可以使用,两个同时就不行了

          service.php配置是这样的:
          ‘qq’ => [
          ‘client_id’ => env(‘QQ_KEY’),
          ‘client_secret’ => env(‘QQ_SECRET’),
          ‘redirect’ => env(‘QQ_REDIRECT_URI’),
          ],

          ‘weibo’ => [
          ‘client_id’ => env(‘WEIBO_KEY’),
          ‘client_secret’ => env(‘WEIBO_SECRET’),
          ‘redirect’ => env(‘WEIBO_REDIRECT_URI’),
          ],

          .env是这样的
          QQ_KEY=……
          QQ_SECRET=………
          QQ_REDIRECT_URI=http://jingying.cn/auth/callback

          WEIBO_KEY=……..
          WEIBO_SECRET=……….
          WEIBO_REDIRECT_URI=http://jingying.cn/auth/callback

          学院君帮帮忙 o(╥﹏╥)o

发表评论

标记为*的字段是必填项(邮箱地址不会被公开)

你可以使用这些HTML 标签和属性: <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <s> <strike> <strong>