invalid_credentials на JWT aut laravel - PullRequest
0 голосов
/ 25 апреля 2018

Я использую jwt-auth для аутентификации API с laravel и пишу следующий код.

Мой API регистрации работает исправно. Ошибка моего API входа возвращает invalid_credentials Ошибка. почему?

версия Laravel: 5.4

public function login(Request $request) {

    $credentials = $request->only('username', 'password');

    try {
        $token = JWTAuth::attempt($credentials);
        if (!$token) {
            return response()->json(['error' => 'invalid_credentials'], 401);
        }
    } catch (JWTException $e) {
        return response()->json(['error' => 'could_not_create_token'], 400);
    }

    return response()->json(compact('token'), 200);
}

public function register(Request $request) {

    $credentials = $request->only('email', 'username', 'password', 'name');

    $validator = Validator::make($credentials, [
        'name' => 'required|max:80',
        'username' => 'required|max:80|unique:users',
        'email' => 'required|email|max:255|unique:users',
        'password' => 'required|min:6',
    ]);

    if ($validator->fails()) {
        $errors = $validator->errors();
        return response()->json(['error' => array(
            'name'     => $errors->first('name'),
            'email'    => $errors->first('email'),
            'username'    => $errors->first('username'),
            'password' => bcrypt('password'),
        )], 400);
    }

    $user = User::create([
        'name'      => $request->name,
        'email'     => $request->email,
        'username'  => $request->username,
        'password'  => $request->password,
    ]);

    $token = JWTAuth::fromUser($user);
    return response()->json(compact('token'));
}

Ответы [ 2 ]

0 голосов
/ 26 апреля 2018

Я пробую любое решение и не работаю, и снова проверяю мой код и нахожу ошибку в моем коде. Я делаю bcrypt в проверке и ничего на пользователя создать. Исправил это, и это работает для меня.

public function login(Request $request) {

    $credentials = $request->only('username', 'password');

    try {
        $token = JWTAuth::attempt($credentials);
        if (!$token) {
            return response()->json(['error' => 'invalid_credentials'], 401);
        }
    } catch (JWTException $e) {
        return response()->json(['error' => 'could_not_create_token'], 400);
    }

    return response()->json(compact('token'), 200);
}

public function register(Request $request) {

    $credentials = $request->only('email', 'username', 'password', 'name');

    $validator = Validator::make($credentials, [
        'name' => 'required|max:80',
        'username' => 'required|max:80|unique:users',
        'email' => 'required|email|max:255|unique:users',
        'password' => 'required|min:6',
    ]);

    if ($validator->fails()) {
        $errors = $validator->errors();
        return response()->json(['error' => array(
            'name'     => $errors->first('name'),
            'email'    => $errors->first('email'),
            'username'    => $errors->first('username'),
            'password' => $errors->first('password'),
        )], 400);
    }

    $user = User::create([
        'name'      => $request->name,
        'email'     => $request->email,
        'username'  => $request->username,
        'password'  => bcrypt($request->password),
    ]);

    $token = JWTAuth::fromUser($user);
    return response()->json(compact('token'));
}
0 голосов
/ 25 апреля 2018

Используйте email вместо username. Laravel использует столбец email, а JWTAuth также следует за этим.

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

Чтобы изменить имя пользователя в столбце как username, необходимо изменить функцию username внутри контроллера.

Проверьте пример из github JWTAuth

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...