Laravel 8 Socialite Facebook 重定向不起作用/返回 null

Posted

技术标签:

【中文标题】Laravel 8 Socialite Facebook 重定向不起作用/返回 null【英文标题】:Laravel 8 Socialite Facebook redirect didn't work/return null 【发布时间】:2022-01-20 15:59:46 【问题描述】:

我有一个使用 Laravel 8 作为后端的应用程序。我已经有使用名为“帐户”的自定义表的身份验证过程,我想使用一些社交登录过程,从 Facebook 开始。问题是,我在编码时遇到了一些问题。我的控制器没有正确重定向到 Facebook 并返回 "data": null, "error": null。我搜索了这个问题,已经改了一些代码来解决这个问题,但问题仍然存在。

路线

use App\Http\Controllers\LoginSocialController;

Route::get('account/provider/login', [LoginSocialController::class, 'redirectToProvider'])->name('social_login');
Route::get('account/provider/login/callback', [LoginSocialController::class, 'handleProviderCallback'])->name('social_login_callback');

控制器

namespace App\Http\Controllers;

use Laravel\Socialite\Facades\Socialite;
use App\Services\AccountService;
use App\Services\AuthService;

use Exception;

class LoginSocialController extends Controller

    public function redirectToProvider($provider)
    
        return Socialite::driver($provider)->stateless()->redirect();
    

    public function handleProviderCallback($provider)
    
        $providerAccount = Socialite::driver($provider)->stateless()->user();
        dd($providerAccount);
    

services.php

return [   
    'mailgun' => [
        'domain' => env('MAILGUN_DOMAIN'),
        'secret' => env('MAILGUN_SECRET'),
        'endpoint' => env('MAILGUN_ENDPOINT', 'api.mailgun.net'),
    ],

    'postmark' => [
        'token' => env('POSTMARK_TOKEN'),
    ],

    'ses' => [
        'key' => env('AWS_ACCESS_KEY_ID'),
        'secret' => env('AWS_SECRET_ACCESS_KEY'),
        'region' => env('AWS_DEFAULT_REGION', 'us-east-1'),
    ],

    'facebook' => [
        'client_id' => env('FACEBOOK_CLIENT_ID'),
        'client_secret' => env('FACEBOOK_CLIENT_SECRET'),
        'redirect' => env('FACEBOOK_CALLBACK')
    ],

    'google' => [
        'client_id' => env('GOOGLE_CLIENT_ID'),
        'client_secret' => env('GOOGLE_CLIENT_SECRET'),
        'redirect' => env('GOOGLE_CALLBACK')
    ],

    'apple' => [
        'client_id' => env('APPLE_CLIENT_ID'),
        'client_secret' => env('APPLE_CLIENT_SECRET'),
        'redirect' => env('APPLE_CALLBACK')
    ],

    'github' => [
        'client_id' => env('GITHUB_CLIENT_ID'),
        'client_secret' => env('GITHUB_CLIENT_SECRET'),
        'redirect' => env('GITHUB_CALLBACK')
    ],

];

我不知道我做错了什么,但这似乎与项目不是网络并且仅使用 laravel 作为后端有关。有人遇到同样的问题吗?


编辑

当我在Socialite::driver($provider)->stateless()->redirect() 上使用dd() 时,我得到一个看起来像这样的对象:

https://www.facebook.com/v3.3/dialog/oauth?client_id=123456789&redirect_uri=https%3A%2F%2F%2Fapi%2Faccount%2Ffacebook%2Flogin%2Fcallback&scope=email&response_type=code&state=nesi0U0nBm64Y9jHq1G(已编辑)

奇怪的是,我只是调用端点并没有得到这个响应。所以我不得不使用dd()

【问题讨论】:

你没有从你的控制器方法中“返回”一个重定向,那么它将如何重定向? 这是我作为变量调用的测试,但即使使用“return”重定向也不起作用 【参考方案1】:

你的回调路径

Route::get('account/provider/login/callback', [LoginSocialController::class, 'handleProviderCallback'])->name('social_login_callback');

您的 FB 应用程序必须与您之前在 Facebook developer 中创建的相同

并检查您的 .env 文件中的应用程序密钥和应用程序 ID

【讨论】:

之前已经检查过了,当在开发者的facebook页面中没有正确设置回调时,返回的是一个页面说URL没有正确设置

以上是关于Laravel 8 Socialite Facebook 重定向不起作用/返回 null的主要内容,如果未能解决你的问题,请参考以下文章

无法将 Laravel / Socialite 与 Lumen 一起使用

使用 Laravel Socialite 登录 Facebook

Laravel Socialite 与 Facebook 未登录

Laravel 7 Socialite Google 登录显示无效的授权错误

Laravel 5.2 Socialite 检索空电子邮件

用户取消应用请求后,Laravel 5 Socialite Facebook 登录错误处理回调