簡體   English   中英

Laravel Socialite - 谷歌登錄失敗“缺少必需的參數:client_id”雖然指定

[英]Laravel Socialite - google login failed “Missing required parameter: client_id” although specified

我在使用 Laravel Socialite 通過 Google API 登錄用戶時遇到了這個奇怪的問題。

一切配置看起來正常和普通,但我不斷收到錯誤Missing required parameter: client_id 不僅如此,有時我再試一次,錯誤變成了Missing required parameter: redirect_uri盡管已經提供了所有這些參數。

這是它的設置方式:

服務.php

'google' => [
        'client_id' => 'xxxxxxxxxx-x98asxxxx913ofk5tqvgq7lqfpgdi5u2.apps.googleusercontent.com',
        'client_secret' => 'mklOWJFhpbCzTKxxxx-xxxx',
        'redirect' => 'http://myapp.com/auth/google/callback'
    ],

路由文件

Route::get('/auth/{social_channel}', 'Auth\AuthController@redirect_to_provider');

Route::get('/auth/{social_channel}/callback', 'Auth\AuthController@handle_provider_callback');

驗證控制器.php

/**
     * Redirect the user to the Google authentication page.
     *
     * @return Response
     */
    public function redirect_to_provider($social_channel)
    {
        return Socialite::driver($social_channel)->redirect();
    }

    /**
     * Obtain the user information from GitHub.
     *
     * @return Response
     */
    public function handle_provider_callback($social_channel, SocialAccountService $service)
    {
        $user = $service->create_or_get_user($social_channel, Socialite::driver($social_channel)->user());

        Auth::login($user);

        return redirect()->to('/go');

    }

Facebook 登錄對我有用,只是這個 Google 登錄問題是一個頑固而奇怪的問題。

該應用程序部署在 Forge(Ubuntu、Nginx)上。

任何人都可以發現這有什么問題嗎?

使用services.php文件中的env()函數,您必須在.env文件中使用GOOGLE_CLIENT_ID 和GOOGLE_CLIENT_SECRET,不能有空格。

GOOGLE_CLIENT_ID=xxxxxxxxxxxx    
GOOGLE_CLIENT_SECRET=xxxxxxxxxxxxxx

在服務文件中,使用這個

'client_id' => env('GOOGLE_CLIENT_ID'),         
'client_secret' => env('GOOGLE_CLIENT_SECRET'),

我剛剛解決了同樣的問題,我的第一個解決方案是使用->with()在控制器上傳遞 client_id 和 secret。 代碼是這樣的:

    return Socialite::driver('google')
    ->with(
        ['client_id' => 'xxxxxxxx'],
        ['client_secret' => 'xxxxxxxx'],
        ['redirect' => 'http://localhost:8000/Yourcallback'])
    ->redirect();

或者只是通過刪除 services.php 上的env()

    'client_id' => env('xxxxxxx'),
    'client_secret' => env('xxxxxxx'),

有了這個

'client_id' => 'xxxxxxx',
'client_secret' => 'xxxxxxx',

似乎 Socialite 無法識別env()函數。

對於使用Forge 的人,您可能需要在 Forge 面板的環境選項卡中添加 google .env信息。 .env信息不會通過 Github 推送到 Forge。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM