Laravel Socialite Gitlab 401

У меня есть локальный проект, в котором я хотел бы использовать свои учетные данные 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: Ошибка аутентификации клиента из-за неизвестного клиента, нет аутентификации клиента (усечено ...)

Почему жрать возвращает 401 несанкционированный?


person Ari    schedule 04.03.2019    source источник


Ответы (2)


Я нашел решение своего вопроса для всех, кто может быть заинтересован:

Я изменил:

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

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

To

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('/');
}

И теперь все работает именно так, как должно.

person Ari    schedule 08.03.2019

Убедитесь, что URL-адрес обратного вызова, указанный вами в gitlab / github / any provider, совпадает с указанным в приложении (config / services.php)

person MisterCat    schedule 09.01.2020