簡體   English   中英

Dingo Api Laravel 5.1上的JWT Auth配置

[英]JWT Auth config on Dingo Api Laravel 5.1.*

我正在使用帶有Dingo Api和JWT Auth的Laravel 5.1.33,已經安裝了所有這些,但是現在我很困惑,如果我想對用戶進行身份驗證,如果我需要做更多的事情,那么該用戶將無法訪問某些路由而沒有首先登錄。

我在api.php上修改了此代碼:

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

當它出現在這里,在何處添加此代碼以及它的真正作用時,我感到困惑。

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

我已閱讀dingo / api對tymondesigns / jwt-auth具有內置支持,這是否意味着我不需要編寫任何身份驗證代碼,或者這意味着什么?

誰能告訴我是否需要修改當前的AuthController,目前看來如下:

<?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']),
        ]);
    }
}

如果是這樣,需要添加什么方法? 它說Dingo支持內置的jwt auth,因此我決定使用此程序包,不僅是這個原因,還有其他一些原因,例如轉換器,速率限制等,但我仍然困惑我是否需要編寫額外的代碼適用於身份驗證用戶,因為它已在構建中支持...如果不支持,如何登錄? 我沒有聲明用於身份驗證的路由,也沒有注冊用戶,我應該以某種方式將這些路由指向某些控制器,有人可以提供幫助嗎?

步驟如下:

第1步:

打開App \\ Providers \\ 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')
    ]);

}

}

第三步:

創建一個如下所示的根Api控制器。

namespace App\Http\Controllers\Api;

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


class ApiController extends Controller
{
    use Helpers;
}

第四步

現在,您可以使用Dingo JWT身份驗證了。 只需從ApiController類擴展您的控制器類即可。 那必須是所有Api Controller的父級。

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'
        ]);
}

}

看看這個github項目 ,您可以參考它的路由和控制器。

需要添加一些方法,例如,

  1. login:用戶登錄以獲取令牌。
  2. 刷新令牌:令牌無效時。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM