2016-12-27 4 views
0

Dingo ApiとJWT AuthでLaravel 5.1.33を使用していますが、これらのすべてをインストールしましたが、今は認証したい場合はもっと処理が必要な場合は混乱しますユーザーは最初にログインしなくても特定のルートにアクセスすることができません。 Dingo Api Laravel 5.1でのJWT認証設定*

が、私はapi.phpに変更したコードをhavethis:

'auth' => [ 
    'jwt' => 'Dingo\Api\Auth\Provider\JWT', 
], 

それはどこにこのコードを追加し、それが本当に何をするのか、ここに来るとき、私は混乱していますか?私はディンゴ/ APIを読んだ

app('Dingo\Api\Auth\Auth')->extend('jwt', function ($app) { 
    return new Dingo\Api\Auth\Provider\JWT($app['Tymon\JWTAuth\JWTAuth']); 
}); 

がtymondesigns/JWT-AUTHのためのビルトインサポートを持って、私はいけない、この平均値は、任意の認証コードを書く必要がない、またはこれは何を意味するのでしょうか?どのような方法が追加する必要があり、

<?php 

namespace App\Http\Controllers\Auth; 

use App\User; 
use Validator; 
use App\Http\Controllers\Controller; 
use Illuminate\Foundation\Auth\ThrottlesLogins; 
use Illuminate\Foundation\Auth\AuthenticatesAndRegistersUsers; 

class AuthController extends Controller 
{ 
    /* 
    |-------------------------------------------------------------------------- 
    | Registration & Login Controller 
    |-------------------------------------------------------------------------- 
    | 
    | This controller handles the registration of new users, as well as the 
    | authentication of existing users. By default, this controller uses 
    | a simple trait to add these behaviors. Why don't you explore it? 
    | 
    */ 

    use AuthenticatesAndRegistersUsers, ThrottlesLogins; 

    /** 
    * Create a new authentication controller instance. 
    * 
    * @return void 
    */ 
    public function __construct() 
    { 
     $this->middleware('guest', ['except' => 'getLogout']); 
    } 

    /** 
    * Get a validator for an incoming registration request. 
    * 
    * @param array $data 
    * @return \Illuminate\Contracts\Validation\Validator 
    */ 
    protected function validator(array $data) 
    { 
     return Validator::make($data, [ 
      'name' => 'required|max:255', 
      'email' => 'required|email|max:255|unique:users', 
      'password' => 'required|confirmed|min:6', 
     ]); 
    } 

    /** 
    * Create a new user instance after a valid registration. 
    * 
    * @param array $data 
    * @return User 
    */ 
    protected function create(array $data) 
    { 
     return User::create([ 
      'name' => $data['name'], 
      'email' => $data['email'], 
      'password' => bcrypt($data['password']), 
     ]); 
    } 
} 

その場合:私は以下のように見えるこの時点で、現在のAuthControllerを変更する必要がある場合

誰も教えてもらえますか? Dingoはビルドされたjwt authでサポートしているので、この理由だけでなく、変圧器、レート制限などの理由もなく、このパッケージを使用することにしました。しかし、余分なものを書く必要があるかどうかはまだ分かりませんビルド時にすでにサポートしている認証ユーザー用のコード...そうでなければ、どうすればログインできますか?私は認証のために宣言されたルートがなく、ユーザーを登録していないので、どういうわけかそれらのルートをいくつかのコントローラに向けなければなりません。

答えて

-1

look at this github projectの経路とコントローラを参照できます。トークンを取得するには、ユーザーログイン:

いくつかの方法は、例えば、追加する

  1. ログインが必要です。
  2. リフレッシュトークン:トークンが無効の場合。ここで
+0

リンクが – xhulio

+1

githubのプロジェクト例がJWTないOAuthのた​​めに実装されているように見えるいくつかの時間後に利用できないかもしれないので、答えに多くの説明を追加して、リンクを提供しないようにしてください – Sisir

0

の手順です:

ステップ1:

オープンのApp \プロバイダ\ AuthServiceProviderブート方法

app('Dingo\Api\Auth\Auth')->extend('jwt', function ($app) { 

    return new \Dingo\Api\Auth\Provider\JWT($app['Tymon\JWTAuth\JWTAuth']);   
}); 

ステップ2

認証トークンを生成する認証コントローラを作成して返すこと

namespace App\Http\Controllers\Api; 

use Illuminate\Http\Request; 
use JWTAuth; 
use Tymon\JWTAuth\Exceptions\JWTException; 

class AuthenticateController extends ApiController 
{ 

public function authenticate(Request $request) 
{ 
    // grab credentials from the request 
    $credentials = $request->only('email', 'password'); 

    try { 
     // attempt to verify the credentials and create a token for the user 
     if (!$token = JWTAuth::attempt($credentials)) { 
      return response()->json(['error' => 'invalid_credentials'], 401); 
     } 
    } catch (JWTException $e) { 
     // something went wrong whilst attempting to encode the token 
     return $this->response->errorInternal('Could not create token'); 
    } 

    return $this->response->array([ 
     'token' => $token, 
     'expire_in' => \Carbon\Carbon::now()->addMinutes(config('jwt.ttl'))->format('Y-m-d H:i:s') 
    ]); 

} 

}

ステップに次のコードを貼り付け3:

次のようなルートApiコントローラを作成します。

namespace App\Http\Controllers\Api; 

use App\Http\Controllers\Controller; 
use Dingo\Api\Routing\Helpers; 


class ApiController extends Controller 
{ 
    use Helpers; 
} 

ステップ4

今、あなたは、ディンゴJWTの認証を使用する準備が整いました。 ApiControllerクラスからコントローラクラスを拡張するだけです。それはすべてのApiコントローラの親でなければなりません。

namespace App\Http\Controllers\Api; 


use App\Http\Requests\Request; 

class TestController extends ApiController 
{ 
    public function index(Request $request) 
    { 
     $this->auth; # Here Auth is the logged in user object 
     # to return pagination 
     return $this->response->paginator(User::paginate(10), new 
      UserTransformer()); 
     # to return a single Model instance 
     return $this->response->item($user, new UserTransformer()); 
     # to return error. Others error methods as well 
     return $this->response->errorInternal('Error Message'); 
     # to return a custom array 
     return $this->response->array([ 
      'status' => 200, 
      'message' => 'Msg' 
     ]); 
} 

}