Laravel Socialite Gitlab 401

问题描述 投票:1回答:1

我有一个本地项目,我想使用我的gitlab凭据登录。我正在使用Laravel Socialite,并将socialiteproviders / gitlab包下载到我的项目中。

在gitlab.mycompany.be中,我创建了一个应用程序密钥,一个密钥和uri如下:

http://react.test/login
http://react.test/login/gitlab/callback

我已经包括提供者:

'gitlab' => [
        'client_id' => env('GITLAB_KEY'),
        'client_secret' => env('GITLAB_SECRET'),
        'redirect' => env('GITLAB_REDIRECT_URI'),
        'instance_uri' => env('GITLAB_BASE_URL'),
    ],

我的LoginController看起来像这样:

use AuthenticatesUsers;

/**
 * Where to redirect users after login.
 *
 * @var string
 */
protected $redirectTo = '/home';

/**
 * Create a new controller instance.
 *
 * @return void
 */
public function __construct()
{
    $this->middleware('guest')->except('logout');
}

public function redirectToProvider()
{
    return Socialite::driver('gitlab')->redirect();
}

public function handleProviderCallback()
{
    $user = Socialite::driver('GitLab')->user();
    $accessTokenResponseBody = $user->accessTokenResponseBody;
    // $user->token;
}

我的路线:

Route::get('/', function () {
    return view('welcome');
});

Auth::routes();

Route::get('/home', 'HomeController@index')->name('home');

Route::resource('tasks', "TaskController");

Route::get('login', 'Auth\LoginController@redirectToProvider');
Route::get('login/gitlab/callback', 'Auth\LoginController@handleProviderCallback');

我的.env是什么样的:

GITLAB_TOKEN=***
GITLAB_KEY=***
GITLAB_SECRET=***
GITLAB_REDIRECT_URI=http://react.test/login/gitlab/callback
GITLAB_BASE_URL=http://gitlab.mycompany.be/
GITLAB_METHOD=token
GITLAB_HOST="http://gitlab.mycompany.be/"

我可以从gitlab.mycompany.be登录我的帐户,但在重定向后,我收到以下消息:

GuzzleHttp \ Exception \ ClientException(401)

客户端错误:POST https://gitlab.com/oauth/token导致401 Unauthorized响应:{“error”:“invalid_client”,“error_description”:“客户端身份验证因未知客户端失败,没有客户端身份验证(截断...)

为什么guzzle返回401未经授权?

laravel authentication gitlab guzzle laravel-socialite
1个回答
0
投票

我为其他可能感兴趣的人找到了我自己的问题的解决方案:

我变了:

public function redirectToProvider()
{
    return Socialite::driver('gitlab')->redirect();
}

public function handleProviderCallback()
{
    $user = Socialite::driver('GitLab')->user();
}

public function redirectToProvider()
{
    return Socialite::driver('gitlab')->stateless()->redirect();
}

public function handleProviderCallback()
{
    $user = Socialite::driver('GitLab')->stateless()->user();
}

然后在我的回调中进一步将用户存储在数据库中

public function handleProviderCallback(Request $request)
{
    $user = Socialite::driver('gitlab')->stateless()->user();

    $authUser = $this->findOrCreateUser($user);

    Auth::login($authUser, true);

    return redirect()->route('/');
}

而现在它的工作正是应有的。

© www.soinside.com 2019 - 2024. All rights reserved.