Laravel 第三方登录之微博

申请微博开发者

  • 首先到新浪微博申请加入开发者: http://open.weibo.com/

  • 右上角登录,登录后点击右上角头像,选第一个编辑开发者信息并提交审核

  • 然后导航栏 微连接->网站接入->立即接入,添加一个应用

  • 导航栏,我的应用->应用信息->高级信息

  • 如果只是个人练手第三方登陆,可以不进行审核等操作,你会得到一个App Key和一个App Secret。

Composer安装

composer require socialiteproviders/weibo

添加 Service Provider config/app.php 如果之前添加过 Socialite Provider,得先注释掉

'providers' => [
//    Laravel\Socialite\SocialiteServiceProvider::class,
    SocialiteProviders\Manager\ServiceProvider::class, // add
],

添加 Facades Aliase config/app.php

'aliases' => [
    'Socialite' => Laravel\Socialite\Facades\Socialite::class, // add
],

添加事件处理器 文件 app/Providers/EventServiceProvider.php

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

添加路由 可以自己创建控制器

// 引导用户到新浪微博的登录授权页面
Route::get('auth/weibo', 'Auth\AuthController@weibo');
// 用户授权后新浪微博回调的页面
Route::get('auth/callback', 'Auth\AuthController@callback');

配置 文件 config/services.php

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

.env

WEIBO_KEY=39367792262
WEIBO_SECRET=086e39e85d85898c88bab100287
WEIBO_REDIRECT_URI=http://www.zb.cn/auth/weibo

控制器代码

<?php
namespace App\Http\Controllers\Auth;
use Illuminate\Http\Request;
use App\Http\Controllers\Controller;
class AuthController extends Controller
{
     //获取微博登录页面
     public function weibo() {
        return \Socialite::with('weibo')->redirect();
        // return \Socialite::with('weibo')->scopes(array('email'))->redirect();
    }
    //获取登录用户信息
    public function callback() {
        $oauthUser = \Socialite::with('weibo')->user();
        var_dump($oauthUser->getId());
        var_dump($oauthUser->getNickname());
        var_dump($oauthUser->getName());
        var_dump($oauthUser->getEmail());
        var_dump($oauthUser->getAvatar());
    }
}

错误解决
如果是没有21322 显示重定向错误

在微博开发平台中的我的应用里应用信息里的高级设置设置授权设置

如果是ssl错误的话

下载cacert.pem
放置在php的文件夹下面
配置php.ini   curl.cainfo ="cacert.pem 所在的路径"

如果是400 Bad Request或no message

清理游览器记录,清理cookie
本作品采用《CC 协议》,转载必须注明作者和本文链接
《L04 微信小程序从零到发布》
从小程序个人账户申请开始,带你一步步进行开发一个微信小程序,直到提交微信控制台上线发布。
《G01 Go 实战入门》
从零开始带你一步步开发一个 Go 博客项目,让你在最短的时间内学会使用 Go 进行编码。项目结构很大程度上参考了 Laravel。
讨论数量: 4
wanghan

我的应用->应用信息->高级信息里怎么设置才能不报21322?没看懂。。

5年前 评论
wanghan

主要是里面有个callback cancel,这个需要设置吗?

5年前 评论

@wanghan 回调路由没有写对,或者不一致

5年前 评论

在授权确认页面,点击“登录”按钮可以成功授权,但是点击“取消”按钮就会报一个21325的错误。

GuzzleHttp \ Exception \ ClientException (400)
Client error: `POST https://api.weibo.com/oauth2/access_token` resulted in a `400 Bad Request` response: {"error":"invalid_grant","error_code":21325,"request":"/oauth2/access_token","error_uri":"/oauth2/access_token","error_d (truncated...)

这个不是回调路由或者需要清理缓存的问题,求解
file

4年前 评论

讨论应以学习和精进为目的。请勿发布不友善或者负能量的内容,与人为善,比聪明更重要!