Как сделать логин API с помощью Laravel 5.6 Паспорт с другого стола и охраны - PullRequest
0 голосов
/ 10 октября 2018

Как сделать токен API входа в систему с паспортом Laravel 5.6 из другой таблицы (посетители, а не пользователи) и с другим защитником (посетителем).

Работает , когда я использую таблицу авторизации laravel по умолчанию( пользователи ), но мне нужен логин от посетителей таблицы.

это мой auth.php

'guards' => [
    'web' => [
        'driver' => 'session',
        'provider' => 'users',
    ],

    'api' => [
        'driver' => 'passport',
        'provider' => 'users',
    ],
    'visitor' => [
        'driver' => 'session',
        'provider' => 'visitors',
    ],

    'visitor-api' => [
        'driver' => 'passport',
        'provider' => 'visitors',
    ],
],
'providers' => [
    'users' => [
        'driver' => 'eloquent',
        'model' => App\User::class,
    ],
    'visitors' => [
        'driver' => 'eloquent',
        'model' => App\Visitor::class,
    ],

],

А это мой AuthControlloer дляAPI

public function login(Request $request)
{
    $request->validate([
        'email' => 'required|string|email',
        'password' => 'required|string',
        'remember_me' => 'boolean'
    ]);

    if (!Auth::guard('visitor')->attempt(['email' => $request->email, 'password' => $request->password], $request->remember))
    return response()->json(['message' => 'Unauthorized'], 401);
    $user = $request->user();
    $tokenResult = $user->createToken('Personal Access Token');
    $token = $tokenResult->token;


    if ($request->remember_me)
        $token->expires_at = Carbon::now()->addWeeks(1);
    $token->save();
    return response()->json([
        'access_token' => $tokenResult->accessToken,
        'token_type' => 'Bearer',
        'expires_at' => Carbon::parse(
            $tokenResult->token->expires_at
        )->toDateTimeString()
    ]);
}

Это сообщение об ошибке при тестировании в почтальоне

"message": "Call to a member function createToken() on null",

1 Ответ

0 голосов
/ 10 октября 2018

Использование $request->user() приведет только к тому, что пользователь получит охрану по умолчанию.

Чтобы получить пользователя, вместо этого вам потребуется Auth::guard('visitor')->user(), чтобы получить пользователя.

Затем вы получитебыть в состоянии вызвать createToken() для пользователя, если вы добавили черту HasApiTokens к модели.

...