正文 Laravel第三方登录开发之实现微博登录 拾年之璐 V管理员 /2021年 /1106 阅读 0322 ## Laravel第三方登录开发之实现微博登录 [TOC] > 本文,将详细讲述如何在Laravel框架中,实现微博登录。 ### 1. 准备工作 进行开发之前,首先需要在`微博开放平台`接入网站。 1、注册一个`微博账号`(估计大家都有),然后登录微博([https://weibo.com](https://weibo.com)) 2、前往`微博开放平台`(网址:[https://open.weibo.com/](https://open.weibo.com/)),这时,右上角显示已登录。 3、如果需要更多的`高级功能`,可以进行`开发者认证`(点击右上角头像→开发者信息)  4、点击`级别与权限`,可以查看当前账户拥有的权限。 下图中的账号,已经拥有了`授权服务`。  5、点击`微链接→网站接入`(网址:[https://open.weibo.com/connect](https://open.weibo.com/connect)),可以将自己的网站接入。  6、点击`立即接入`,输入`应用名称`,点击`创建`  7、点击创建后,自动`创建成功`,自动跳转至`应用信息`页面。这里可以看到应用的`App Key` 和` App Secret`。  + 如果应用需要上线,则对信息进行完善需要对应用的信息进行完善。 + 如果只是学习开发技术,则不需要完善信息。 8、`审核通过`的网站应用,是可以上线运营的。  9、填写`应用信息→高级信息`中的`OAuth2.0 授权设置`的`回调页`,如下:  如果网站基本信息已经审核通过,则下面的安全设置等其他信息建议填写完整。 10、如果只是测试,`未提交基本信息审核`,则需要添加`测试账号`信息。  如果已经审核通过,则不需要添加测试账号。  至此,网站接入完成,我们开发中需要的`三个参数`如下: > + App Key > + App Secret > + 授权回调页 ### 2. 实现微博登录,并获取用户基本信息 1、`创建一个Laravel项目`。 > 如何创建?[点击此处查看](https://blog.csdn.net/cxh_1231/category_10786101.html) 2、`添加依赖插件/服务`: 打开`Terminal`,使用如下 `composer` 命令即可添加 ```php composer require socialiteproviders/weibo ``` 如图:  3、添加`服务提供器`Service Provider > 此步骤和其他登录方式添加内容相同。 打开文件 `config/app.php` ,找到 `provider` 字典,添加的内容如下: ```php 'providers' => [ //Laravel\Socialite\SocialiteServiceProvider::classo //有博文说,如果有这行,请注释掉 SocialiteProviders\Manager\ServiceProvider::class,//添加这样 ], ``` 4、添加`门面`Facades Aliase > 此步骤和其他登录方式添加内容相同。 同样在 `config/app.php` 中,往下翻,即可看到 `aliases` 字典,添加的内容如下: ```php 'aliases' => [ 'Socialite' => Laravel\Socialite\Facades\Socialite::class,//追加这行 ], ``` 5、添加`事件处理器 ` EventServiceProvider > 此步骤和其他登录方式添加内容类似,追加。 在文件 `app/Providers/EventServiceProvider.php` 中,找到 `$listen` 数组,添加内容如下: ```php protected $listen = [ //添加下面这个处理器 'SocialiteProviders\Manager\SocialiteWasCalled' => [ //如果已经实现了QQ登录,这里追加下面这一行 'SocialiteProviders\Weibo\WeiboExtendSocialite@handle', ], ]; ``` 6、配置参数 在上一节的末尾,说明了需要的参数。 在配置文件 `config/services.php` 中,添加如下内容: ```php 'weibo' => [ 'client_id' => env('WEIBO_KEY'), 'client_secret' => env('WEIBO_SECRET'), 'redirect' => env('WEIBO_REDIRECT_URI'), ], ``` 然后在 `.env` 文件中,设置参数 ```php WEIBO_KEY=APP ID WEIBO_SECRET=APP Key WEIBO_REDIRECT_URI=网站回调地址 ``` 7、添加`路由` 在 `web.php` 路由文件中,添加如下路由,其中各个路由的说明见注释。 ```php // 引导用户到新浪微博的登录授权页面 Route::get('login/weibo', 'AuthController@weiboLogin'); // 用户授权后新浪微博回调的页面 Route::get('oauth/weibo', 'AuthController@weiboCallback'); ``` 8、创建`控制类` ```php php artisan make:controller AuthController ``` 9、编写控制类内容,并测试: ```php redirect(); } //登录成功后,回调页面获取登录用户信息 public function weiboCallback() { $userInfo = Socialite::driver('weibo')->user(); dd($userInfo); } } ``` ### 3. 效果测试 1、访问`登录页面`,路由中已设置网址为:http://yourdomain.com/login/weibo 2、自动跳转至微博官方的授权登录页面  3、使用前面的`测试账号`扫码登录后,即可跳转至`回调页面`:http://yourdomain.com/oauth/weibo > 如果跳转后,有下图所示的`cURL error 60`错误,请看最后一节。 > >  4、页面将打印登录用户的`基本信息`  可以看出,打印的信息是`非常完`整的,`用户数组user: array`有78条信息。 5、可以选择性打印信息。 如下,将回调方法进行修改,可以只获取对我们有用的信息: ```php //获取登录用户信息 public function weiboCallback() { $userInfo = Socialite::driver('weibo')->user(); // dd($userInfo); // 获取基本信息 echo '用户ID:' . $userInfo->getId() . ''; echo '用户头像URL:' . $userInfo->getAvatar() . ''; echo '用户昵称:' . $userInfo->getNickname() . ''; //获取更加详细的信息 $user = $userInfo->user; echo '性别:' . $user['gender'] . ''; echo '省市:' . $user['location'] . ''; echo '个人简介:' . $user['description'] . ''; echo '粉丝数:' . $user['followers_count'] . ''; echo '关注数:' . $user['friends_count'] . ''; echo '账号创建时间:' . $user['created_at'] . ''; } ``` 这时,打印的信息如下:  ### 5、测试阶段的一个问题  > 参考自:https://my.oschina.net/u/4346195/blog/3499485 1、访问[https://curl.haxx.se/ca/cacert.pem](https://curl.haxx.se/ca/cacert.pem) 下载名为 `cacert.pem` 的文件 2、将文件放在某个文件夹下(比如桌面),然后复制其路径,如:C:\Users\zhangsan\Desktop\cacert.pem 3、然后打开 `php.ini` 文件,找到最后面的 `curl.cainfo = ` ,将其取消注释,并修改为 `curl.cainfo = cacert.pem文件路径` ,保存即可。如: ```php [curl] ; A default value for the CURLOPT_CAINFO option. This is required to be an ; absolute path. curl.cainfo = "C:\Users\zhangsan\Desktop\cacert.pem" ``` 重启phpstudy。 > 参考资料: > > 1. https://learnku.com/articles/24952 > 2. https://my.oschina.net/u/4346195/blog/3499485 本文采用创作共用版权 CC BY-NC-SA 3.0 CN 许可协议,转载或复制请注明出处! -- 展开阅读全文 --