社交媒体登录认证提供者大全 —— Socialite Providers,支持微博、微信、QQ等
1、简介
Socialite Providers是一个扩展自Laravel Socialite的OAuth 1 & 2 包集合。其中的Manager包使用观察者模式来扩展Socialite,这种机制允许除了Laravel Socialite提供的认证提供者之外的多个其它提供者被使用,且只有添加到监听器的提供者被使用。
2、GitHub
https://github.com/SocialiteProviders3、优点
- 可以访问Manager加载的所有认证提供者
- 直到Socialite被调用时提供者才会实例化
- 支持覆盖当前认证提供者
- 支持创建新的认证提供者
4、认证提供者
目前Socialite Providers支持使用83种社交媒体进行第三方登录认证:
- 23andme
- 37Signals
- 500px
- AngelList
- App.net
- Asana
- Bit.ly
- Box
- Buffer
- CampaignMonitor
- Cheddar
- Coinbase
- ConstantContact
- Coursera
- Dailymile
- Dailymotion
- Deezer
- deviantART
- DigitalOcean
- Disqus
- Douban
- Dribbble
- Dropbox
- Envato
- Eventbrite
- Everyplay
- EyeEm
- Fitbit
- Flickr
- Foursquare
- Goodreads
- Google+
- Heroku
- Human API
- Imgur
- Jawbone
- Jira
- Kakao
- MailChimp
- Meetup
- Microsoft Azure
- Microsoft Live
- Mixcloud
- Moves
- Naver
- Paymill
- PayPal
- PayPal Sandbox
- Podio
- Pushbullet
- Rdio
- Readability
- RunKeeper
- Slack
- SoundCloud
- Spotify
- StackExchange
- StockTwits
- Strava
- Stripe
- Trello
- Tumblr
- Twitch
- Uber
- Venmo
- VersionOne
- Vimeo
- VKontakte
- Weixin
- Weixin Web
- WordPress
- xREL
- Yammer
- Yandex
- YouTube
- Zendesk
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及其它社交媒体第三方登录认证与此类似,不再赘述。
40 Comments
Driver [qq] not supported. 求楼主指点,拜谢,试过很多种方法都不行
QQ报错无法找到类 Illuminate\Contracts\Container\BindingResolutionException
Target class [SocialiteProviders\QQ\QQExtendSocialite] does not exist.
at vendor/laravel/framework/src/Illuminate/Container/Container.php:881 877▕ 878▕ try { 879▕ $reflector = new ReflectionClass($concrete); 880▕ } catch (ReflectionException $e) { ➜ 881▕ throw new BindingResolutionException("Target class [$concrete] does not exist.", 0, $e); 882▕ } 883▕ 884▕ // If the type is not instantiable, the developer is attempting to resolve 885▕ // an abstract type such as an Interface or Abstract Class and there is
26 artisan:37 Illuminate\Foundation\Console\Kernel::handle(Object(Symfony\Component\Console\Input\ArgvInput), Object(Symfony\Component\Console\Output\ConsoleOutput))