Laravel 5.3 Паспорт JWT Аутентификация

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

Теперь в 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.

Ответ 1

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

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

ИЛИ выполните следующие действия:

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

После этого создайте 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). Это будет вы используете accessToken, вы можете использовать этот токен, чтобы делать другие запросы в своем приложении с заголовком Authorization и Bearer XXX где xxx - это accessToken, который вы получили из конечной точки /api/auth.

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

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

Надеюсь, это поможет!

Ответ 2

Если вас не интересуют вещи OAuth и Client, вы, вероятно, захотите использовать чистую аутентификацию JWT, если это так, вы можете проверить этот пакет:

https://github.com/miladrahimi/larajwt

Он объявляет новый драйвер проверки подлинности с именем "jwt" для защиты ваших аутентифицированных маршрутов, он предоставляет службу для генерации jwt от ваших пользователей и некоторые другие инструменты, такие как выход из системы, кэширование пользовательской модели, фильтры для проверки дополнительных свойств пользователей и т.д.

Ответ 3

$request-> пользователя(); не работал для меня, потому что промежуточное программное обеспечение настроено на web, что также необходимо + api. В документах не ясно, как управлять обоими сценариями.

Я смог получить информацию о пользователях с помощью маркера Auth Bearer + и на Laravel:

use Illuminate\Support\Facades\Auth;

Route::get('/user', function() {
   return Auth::guard('api')->user();
});

Ответ 4

Вы все это перепутали. Паспорт идеально подходит для приложений, подобных Facebook, где вы хотите, чтобы клиенты ваших пользователей проходили безопасную аутентификацию в вашем API.

Если все, что вы делаете, - это создание API отдыха, например, приложения для здоровья и фитнеса, достаточно использовать пакет Tyson JWT. Это потому, что у вас нет посредника.