2017-01-03 4 views
0

Я создаю API для мобильного приложения, используя Password Grant Tokens. Когда пользователь пытается войти в приложение, клиент отправляет запрос для токена доступа.Laravel Passport: Дополнительные условия модели при отправке запроса токена

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

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

+0

Если мой ответ вам помог, пожалуйста, отметьте его как принятый, чтобы закрыть эту тему. Благодарю. – Learner

ответ

3

ответа от Laravel Загрузил:

сделать свой собственный OAuth/маркер маршрут и положить его в oauth.php файл в/маршрутов:

Route::post('/oauth/token', [ 
    'uses' => 'Auth\[email protected]' 
]); 

Изготовитель CustomAccessTokenController.php

<?php 

namespace App\Http\Controllers\Auth; 

use Psr\Http\Message\ServerRequestInterface; 
use Laravel\Passport\Http\Controllers\AccessTokenController; 

class CustomAccessTokenController extends AccessTokenController 
{ 
    /** 
    * Hooks in before the AccessTokenController issues a token 
    * 
    * 
    * @param ServerRequestInterface $request 
    * @return mixed 
    */ 
    public function issueUserToken(ServerRequestInterface $request) 
    { 
     $httpRequest = request(); 

     // 1. 
     if ($httpRequest->grant_type == 'password') { 
      // 2. 
      $user = \App\User::where('email', $httpRequest->username)->first(); 

      // Perform your validation here 

      // If the validation is successfull: 
      return $this->issueToken($request); 
     } 
    } 
} 

Ссылка - https://github.com/laravel/passport/issues/225#issuecomment-271057428

3

Добавить промежуточное программное обеспечение перед отправкой входных данных вашему поставщику услуг auth и проверить, идет ли письмо, поступающее в вашу базу данных. Если электронное письмо было подтверждено, продолжите запрос, отправив его автору поставщику услуг, иначе возвращайте ответ об ошибке с помощью любого настраиваемого сообщения.

Я вижу, что люди все еще ищут этот ответ и приходят на эту страницу. Определение вашего собственного oauth/token маршрут может быть способом, но более логичным, если вы используете промежуточное ПО, которое сделано для этой цели, чтобы делать изменения до отправки данных контроллеру.

Сделать промежуточное программное обеспечение: php artisan make:middleware MyMiddleware

Регистрация вашего промежуточного программного ядра и сделать это до вашего промежуточного аутентификации

protected $routeMiddleware = [ 
     'auth' => \Illuminate\Auth\Middleware\Authenticate::class,//auth middleare 
     'your_middleware_identifier'=>\App\Http\Middleware\MyMiddleware::class, 
    ]; 


    /** 
    * The application's middleware priority array. 
    * 
    * These middlewares will be executed in way they are listed. 
    * 
    * @var array 
    */ 
    protected $middlewarePriority = [ 
     \App\Http\Middleware\MyMiddleware::class, 
     \Illuminate\Auth\Middleware\Authenticate::class, 
    ]; 

Наконец, вы можете использовать промежуточное программное обеспечение в AuthServiceProvider.php файле, где ваши паспортные маршруты являются: in boot() function

public function boot(Request $request) 
    { 
     $this->registerPolicies(); 

     Route::group(['middleware' => 'your_middleware_identifier'], function() { 
      Passport::routes(); 
     }); 
    } 

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