You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Laravel 8集成OAuth 1.0报bindShared()未定义错误如何解决?

报错根因

jenssegers/laravel-oauth包最后一次更新为2015年,仅适配Laravel 4.x~5.1版本。包内服务提供者调用的bindShared()方法在Laravel 5.2版本已被废弃移除,官方替换为singleton()方法实现相同的单例绑定逻辑,Laravel 8中不存在这个旧方法,必然触发报错。该包已停止维护多年,无适配新版本Laravel的计划,直接弃用即可。

Laravel 8 集成 OAuth 1.0 完整操作流程

1. 清理旧依赖、安装适配包

如果已经安装了旧的jenssegers/oauth包,先执行命令移除:

composer remove jenssegers/laravel-oauth

安装Laravel官方生态维护、兼容Laravel8的OAuth客户端套件:

composer require laravel/socialite socialiteproviders/manager socialiteproviders/oauth1

2. 注册服务与别名

打开config/app.php,在对应数组中添加配置(开启包自动发现的环境可跳过这步):

'providers' => [
    // 保留文件内原有其他服务提供者配置
    Laravel\Socialite\SocialiteServiceProvider::class,
    SocialiteProviders\Manager\ServiceProvider::class,
],
'aliases' => [
    // 保留文件内原有其他别名配置
    'Socialite' => Laravel\Socialite\Facades\Socialite::class,
]

3. 注册事件监听

打开app/Providers/EventServiceProvider.php,在$listen数组中添加Socialite必需的事件订阅:

protected $listen = [
    // 保留文件内原有其他事件监听配置
    \SocialiteProviders\Manager\SocialiteWasCalled::class => [
        'SocialiteProviders\\OAuth1\\OAuth1ExtendSocialite@handle',
    ],
];

4. 配置OAuth1凭证

执行配置发布命令生成Socialite配置文件:

php artisan vendor:publish --provider="Laravel\Socialite\SocialiteServiceProvider"

打开config/services.php,添加OAuth1对接配置:

'oauth1' => [
    'client_id' => env('OAUTH1_CLIENT_ID'),
    'client_secret' => env('OAUTH1_CLIENT_SECRET'),
    'redirect' => env('OAUTH1_REDIRECT_URI'),
    'request_token_url' => '对接平台提供的request_token接口地址',
    'authorize_url' => '对接平台提供的用户授权页地址',
    'access_token_url' => '对接平台提供的access_token接口地址',
],

打开项目根目录的.env文件,填写对应申请到的凭证参数:

OAUTH1_CLIENT_ID=你的平台客户端ID
OAUTH1_CLIENT_SECRET=你的平台客户端密钥
OAUTH1_REDIRECT_URI=你的授权回调地址

5. 编写授权路由与逻辑

打开routes/web.php,添加授权跳转、回调处理两个路由:

use Laravel\Socialite\Facades\Socialite;

// 发起OAuth1授权跳转
Route::get('/auth/oauth1/redirect', function () {
    return Socialite::driver('oauth1')->redirect();
});

// 授权回调处理
Route::get('/auth/oauth1/callback', function () {
    $oauthUser = Socialite::driver('oauth1')->user();
    // 可获取的核心凭证
    // $oauthUser->id 平台方用户唯一ID
    // $oauthUser->token 访问令牌access_token
    // $oauthUser->tokenSecret OAuth1必需的令牌密钥,后续请求接口必须携带
    // 自行编写用户登录、账号绑定、凭证存储等业务逻辑即可
    dd($oauthUser);
});
注意事项
  • OAuth1接口请求对签名规则要求严格,存储用户授权凭证时必须同时保存token和tokenSecret,缺失任意一个都会导致后续接口请求签名校验失败。
  • 如果对接的是Twitter、Tumblr等已有专属Socialite驱动的公开平台,可直接使用对应平台的专属驱动包,无需使用通用OAuth1驱动,配置更简便。

内容的提问来源于stack exchange,提问作者Chitrasen

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.28 09:06:20