2016-12-29 5 views
11

Раньше, когда я использовал laravel 5.2, я использовал сторонний пакет https://github.com/tymondesigns/jwt-auth/ для создания аутентификации на основе JWT. Где мы просто должны были передать имя пользователя и пароль, чтобы получить токен.Laravel 5.3 Passport JWT Authentication

Теперь в laravel 5.3 с введением паспорта я хочу сделать аутентификацию на основе JWT, но для паспорта мне необходимо указать client_id и client_secret вместе с именем пользователя и паролем. которого не было в tymondesigns/jwt-auth.

Если я сделать запрос без client_id то выдает ошибку http://pix.toile-libre.org/upload/original/1482908288.png но когда я прохожу client_id и client_secret то он работает отлично http://pix.toile-libre.org/upload/original/1482908143.png

Как я могу сделать запрос JWT в Laravel 5.3 и паспорт с только имя пользователя и пароль и без указания client_id и client_secret.

ответ

26

Итак, наконец, я отвечаю на свой вопрос. Надеюсь, это поможет кому-то столкнуться с подобной проблемой.

JWT аутентификации может быть сделано с помощью Laravel 5.3 Паспорт, просто выполнить следующие шаги:

ИЛИ следующие шаги:

  • композитор требует laravel/паспорт
  • добавить Laravel\Passport\PassportServiceProvider::class, своих поставщикам приложений
  • PHP ремесленник мигрировать
  • PHP мастерового паспорта: установить
  • Добавить HasApiTokens признак вашей модели пользователя
  • Passport :: маршруты(); в AppServiceProvider
  • Настройка драйвера апи паспорту

После этого создайте UserController и добавьте следующие методы в него:

public function auth(Request $request) 
{ 

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

    $username = $params['email']; 
    $password = $params['password']; 

    if(\Auth::attempt(['email' => $username, 'password' => $password])){ 
    return \Auth::user()->createToken('my_user', []); 
    } 

    return response()->json(['error' => 'Invalid username or Password']); 
} 

    public function index(Request $request) 
    { 
    return $request->user(); 
    } 

В маршрутах/api.php, добавьте следующие маршруты:

Route::post('auth', '[email protected]'); 

Route::group(['middleware' => 'auth:api'], function(){ 

    Route::resource('user', '[email protected]'); 

}); 

Теперь отправьте запрос POST на адрес http://localhost:8000/auth с адресом электронной почты и паролем, как показано на скриншоте (http://pix.toile-libre.org/upload/original/1483094937.png) Это поможет вам маркер доступа, вы можете использовать этот маркер, чтобы сделать другие запросы в вашем приложении с Authorization заголовком и Bearer XXX где ххх является маркер доступа, полученный от /API/Идент конечной точки.

Теперь сделайте запрос GET на /api/user с заголовком Authorization и значением токена, это вернет данные аутентифицированного пользователя. (например: http://pix.toile-libre.org/upload/original/1483095018.png)

Я также разместил эти шаги на своем блоге на http://chatterjee.pw/larvel-passport-jwt-authentication/

Я надеюсь, что это помогает!

+0

можем ли мы сделать пользовательский токен? не из объекта пользователя –

+2

Спасибо за вашу долю, но: 1. Нет обновленного_ответа 2. Я не нашел здесь ни одного сотрудника, связанного с JWT, это просто access_token 3. Я не понимал, почему вы потратили так много время на этом, это метод «попытка()» метода «Auth» и «createToken()» признака «HasApiTokens» –

+1

Это маркерное решение АБСОЛЮТНО НЕ является JWT и поэтому не является ответом на ваш оригинальный вопрос, что делает этот вопрос и ответ вводят в заблуждение для других людей. Потраченный много времени, думая, что это было JWT-решение из-за вопросов и ответов здесь. –

Смежные вопросы