本文,将详细讲述如何在Laravel框架中,实现微博登录。
1. 准备工作
进行开发之前,首先需要在微博开放平台
接入网站。
1、注册一个微博账号
(估计大家都有),然后登录微博(https://weibo.com)
2、前往微博开放平台
(网址:https://open.weibo.com/),这时,右上角显示已登录。
3、如果需要更多的高级功能
,可以进行开发者认证
(点击右上角头像→开发者信息)
4、点击级别与权限
,可以查看当前账户拥有的权限。
下图中的账号,已经拥有了授权服务
。
5、点击微链接→网站接入
(网址:https://open.weibo.com/connect),可以将自己的网站接入。
6、点击立即接入
,输入应用名称
,点击创建
7、点击创建后,自动创建成功
,自动跳转至应用信息
页面。这里可以看到应用的App Key
和App Secret
。
- 如果应用需要上线,则对信息进行完善需要对应用的信息进行完善。
- 如果只是学习开发技术,则不需要完善信息。
8、审核通过
的网站应用,是可以上线运营的。
9、填写应用信息→高级信息
中的OAuth2.0 授权设置
的回调页
,如下:
如果网站基本信息已经审核通过,则下面的安全设置等其他信息建议填写完整。
10、如果只是测试,未提交基本信息审核
,则需要添加测试账号
信息。
如果已经审核通过,则不需要添加测试账号。
至此,网站接入完成,我们开发中需要的三个参数
如下:
- App Key
- App Secret
- 授权回调页
2. 实现微博登录,并获取用户基本信息
1、创建一个Laravel项目
。
如何创建?点击此处查看
2、添加依赖插件/服务
:
打开Terminal
,使用如下 composer
命令即可添加
composer require socialiteproviders/weibo
如图:
3、添加服务提供器
Service Provider
此步骤和其他登录方式添加内容相同。
打开文件 config/app.php
,找到 provider
字典,添加的内容如下:
'providers' => [
//Laravel\Socialite\SocialiteServiceProvider::classo //有博文说,如果有这行,请注释掉
SocialiteProviders\Manager\ServiceProvider::class,//添加这样
],
4、添加门面
Facades Aliase
此步骤和其他登录方式添加内容相同。
同样在 config/app.php
中,往下翻,即可看到 aliases
字典,添加的内容如下:
'aliases' => [
'Socialite' => Laravel\Socialite\Facades\Socialite::class,//追加这行
],
5、添加事件处理器
EventServiceProvider
此步骤和其他登录方式添加内容类似,追加。
在文件 app/Providers/EventServiceProvider.php
中,找到 $listen
数组,添加内容如下:
protected $listen = [
//添加下面这个处理器
'SocialiteProviders\Manager\SocialiteWasCalled' => [
//如果已经实现了QQ登录,这里追加下面这一行
'SocialiteProviders\Weibo\WeiboExtendSocialite@handle',
],
];
6、配置参数
在上一节的末尾,说明了需要的参数。
在配置文件 config/services.php
中,添加如下内容:
'weibo' => [
'client_id' => env('WEIBO_KEY'),
'client_secret' => env('WEIBO_SECRET'),
'redirect' => env('WEIBO_REDIRECT_URI'),
],
然后在 .env
文件中,设置参数
WEIBO_KEY=APP ID
WEIBO_SECRET=APP Key
WEIBO_REDIRECT_URI=网站回调地址
7、添加路由
在 web.php
路由文件中,添加如下路由,其中各个路由的说明见注释。
// 引导用户到新浪微博的登录授权页面
Route::get('login/weibo', 'AuthController@weiboLogin');
// 用户授权后新浪微博回调的页面
Route::get('oauth/weibo', 'AuthController@weiboCallback');
8、创建控制类
php artisan make:controller AuthController
9、编写控制类内容,并测试:
<?php
namespace App\Http\Controllers;
use Illuminate\Http\Request;
use Laravel\Socialite\Facades\Socialite;
class AuthController extends Controller
{
//获取微博登录页面,并跳转
public function weiboLogin() {
return Socialite::driver('weibo')->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、可以选择性打印信息。
如下,将回调方法进行修改,可以只获取对我们有用的信息:
//获取登录用户信息
public function weiboCallback() {
$userInfo = Socialite::driver('weibo')->user();
// dd($userInfo);
// 获取基本信息
echo '用户ID:' . $userInfo->getId() . '<br>';
echo '用户头像URL:' . $userInfo->getAvatar() . '<br>';
echo '用户昵称:' . $userInfo->getNickname() . '<br>';
//获取更加详细的信息
$user = $userInfo->user;
echo '性别:' . $user['gender'] . '<br>';
echo '省市:' . $user['location'] . '<br>';
echo '个人简介:' . $user['description'] . '<br>';
echo '粉丝数:' . $user['followers_count'] . '<br>';
echo '关注数:' . $user['friends_count'] . '<br>';
echo '账号创建时间:' . $user['created_at'] . '<br>';
}
这时,打印的信息如下:
5、测试阶段的一个问题
参考自:https://my.oschina.net/u/4346195/blog/3499485
1、访问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文件路径
,保存即可。如:
[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。
参考资料:
- https://learnku.com/articles/24952
- https://my.oschina.net/u/4346195/blog/3499485