Laravel第三方登录开发之实现微博登录

本文,将详细讲述如何在Laravel框架中,实现微博登录。

1. 准备工作

进行开发之前,首先需要在微博开放平台接入网站。

1、注册一个微博账号(估计大家都有),然后登录微博(https://weibo.com

2、前往微博开放平台(网址:https://open.weibo.com/),这时,右上角显示已登录。

3、如果需要更多的高级功能,可以进行开发者认证(点击右上角头像→开发者信息)

image-20210318202727187

4、点击级别与权限,可以查看当前账户拥有的权限。

下图中的账号,已经拥有了授权服务

image-20210318202912943

5、点击微链接→网站接入(网址:https://open.weibo.com/connect),可以将自己的网站接入。

image-20210318203125169

6、点击立即接入,输入应用名称,点击创建

image-20210318203252486

7、点击创建后,自动创建成功,自动跳转至应用信息页面。这里可以看到应用的App KeyApp Secret

image-20210318203801770

  • 如果应用需要上线,则对信息进行完善需要对应用的信息进行完善。
  • 如果只是学习开发技术,则不需要完善信息。

8、审核通过的网站应用,是可以上线运营的。

image-20210318203955425

9、填写应用信息→高级信息中的OAuth2.0 授权设置回调页,如下:

image-20210318204242557

如果网站基本信息已经审核通过,则下面的安全设置等其他信息建议填写完整。

10、如果只是测试,未提交基本信息审核,则需要添加测试账号信息。

image-20210318204412586

如果已经审核通过,则不需要添加测试账号。

image-20210318204528517

至此,网站接入完成,我们开发中需要的三个参数如下:

  • App Key
  • App Secret
  • 授权回调页

2. 实现微博登录,并获取用户基本信息

1、创建一个Laravel项目

如何创建?点击此处查看

2、添加依赖插件/服务

打开Terminal,使用如下 composer 命令即可添加

composer require socialiteproviders/weibo

如图:

image-20210318210333767

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、自动跳转至微博官方的授权登录页面

image-20210318211448047

3、使用前面的测试账号扫码登录后,即可跳转至回调页面:http://yourdomain.com/oauth/weibo

如果跳转后,有下图所示的cURL error 60错误,请看最后一节。

image-20210318204904408

4、页面将打印登录用户的基本信息

image-20210318211641988

可以看出,打印的信息是非常完整的,用户数组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>';
    }

这时,打印的信息如下:

image-20210318212318081

5、测试阶段的一个问题

image-20210318204904408

参考自: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。

参考资料:

  1. https://learnku.com/articles/24952
  2. https://my.oschina.net/u/4346195/blog/3499485
  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 3
    评论
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

拾年之璐

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值