Как я могу использовать Cartalyst Sentinel с Tymon JWT в Laravel 5.6? - PullRequest
0 голосов
/ 03 июля 2018

Мне интересно, как реализовать tymon jwt 1.0.0 rc2 с пакетом аутентификации Cartalyst Sentinel 2.0 в Laravel 5.6, чтобы воспользоваться преимуществами регулирования и другими функциями Sentinel.

Внутри AuthController У меня есть этот метод login (), как упомянуто в документах jwt-auth введите здесь описание ссылки , чтобы проверить учетные данные и сгенерировать токен.

public function login()
{
    $credentials = request(['email', 'password']);

    if (! $token = auth()->attempt($credentials))
        return response()->json(['error' => 'Unauthorized'], 401);

    return $this->respondWithToken($token);
}

Что я сделал, это следующее

public function login()
{
    $credentials = request(['email', 'password']);

    if (! Sentinel::authenticate($credentials))
        return response()->json(['error' => 'Unauthorized'], 401);

    $token = auth()->attempt($credentials);
    return $this->respondWithToken($token);
}

Но я не думаю, что это правильный путь, потому что существует двойная аутентификация, сначала Sentinel, а затем jwt. и это плохо для производительности.

И второй обходной путь - изменить метод try () внутри класса JWTGuard, который находится в папке vendor / tymon / jwt-auth / src.

по умолчанию следующее

public function attempt(array $credentials = [], $login = true)
{
    $this->lastAttempted = $user = $this->provider->retrieveByCredentials($credentials);

    if ($this->hasValidCredentials($user, $credentials)) {
        return $login ? $this->login($user) : true;
    }

    return false;

}

и я изменил это так

public function attempt(array $credentials = [], $login = true)
{
    if ($user = Sentinel::authenticate($credentials)) {
        return $this->login($user);
    }

    return false;
}

Не знаю, правильное ли это решение или нет?

1 Ответ

0 голосов
/ 05 июля 2018

в jwt config изменить с помощью этого

'auth' => Tymon\JWTAuth\Providers\Auth\Sentinel::class,

А в контроллере авторизации вы можете использовать эту функцию

use Tymon\JWTAuth\Facades\JWTAuth;

/**
 * Handle a login request to the application.
 *
 * @param loginRequest $request
 *
 * @return \Illuminate\Http\RedirectResponse|\Illuminate\Http\Response|\Illuminate\Http\JsonResponse
 */
public function login(loginRequest $request) {

    $credentials = array(
        'email'    => $request->email,
        'password' => $request->password,
    );

    if (! $token = JWTAuth::attempt($credentials)) {
        return response()->json(['error' => 'Unauthorized'], 401);
    } else {
        return $this->respondWithToken($token);
    }
}

/**
 * Get the token array structure.
 *
 * @param  string $token
 *
 * @return \Illuminate\Http\JsonResponse
 */
protected function respondWithToken($token)
{
    return response()->json([
        'access_token' => $token,
        'token_type' => 'bearer',
        'expires_in' => auth('api')->factory()->getTTL() * 60
    ]);
}

И теперь вы можете войти в систему.

...