PHP群:95885625 Hbuilder+MUI群:81989597 站长QQ:634381967
    您现在的位置: 首页 > 开发编程 > Laravel教程 > 正文

    laravel5.4 + dingo api + jwt接口token实战配置讲解

    作者:admin来源:网络浏览:时间:2017-08-03 20:47:47我要评论
    分享到
    导读:项目中使用dingo + jwt来写接口以及安全验证,下面讲解一下配置过程。
    项目中使用dingo + jwt来写接口以及安全验证,下面讲解一下配置过程。

    新装一个Laravel

    1. composer create-project --prefer-dist laravel/laravel myApiProject 
    安装dingo api

    在composer.json中添加

    1. composer require dingo/api:1.0.x@dev 
    在config/app.php

    1. 'providers' => [ 
    2.      //前面很多 
    3.     Dingo\Api\Provider\LaravelServiceProvider::class

    发布配置文件

    终端运行

    1. php artisan vendor:publish --provider="Dingo\Api\Provider\LaravelServiceProvider" 
    打开.env文件,把dingo的配置放到最后面

    1. API_STANDARDS_TREE=vnd // 环境 
    2. API_SUBTYPE=myapp // 子类型 
    3. API_PREFIX=api // 前缀 
    4. API_DOMAIN=api.myapp.com //子域名  (前缀和子域名只能存在一个)可选 
    5. API_VERSION=v1 // 版本 
    6. API_NAME=My API // 名字(使用API Blueprint命令才会用到) 
    7. API_CONDITIONAL_REQUEST=false // 带条件的请求 
    8. API_STRICT=false // Strict模式 
    9. API_DEFAULT_FORMAT=json // 响应格式 
    10. API_DEBUG=true // 调试模式 
    下面是我的配置:

    1. API_STANDARDS_TREE=vnd 
    2. API_SUBTYPE=emall 
    3. API_PREFIX=api 
    4. API_VERSION=v1 
    没必要每个都配上去,主要的配一下就可以了

    安装jwt

    还是composer.json

    1. "require-dev": { 
    2.     "tymon/jwt-auth""1.0.*" 
    3. }, 
    4. "minimum-stability""dev"
    5. "prefer-stable"true  

    其实只需要加上,下面是我的写法,上面是国外的写法
     
    1. "tymon/jwt-auth""1.0.*@dev" 
    运行composer update将dingo和jwt装上去

    添加jwt的认证

    在config/api.php添加内容

    1. 'auth' => [ 
    2.     'jwt' => Dingo\Api\Auth\Provider\JWT::class 
    在config/app.php

    1. 'providers' => [ 
    2.     // 前面很多 
    3.     Tymon\JWTAuth\Providers\LaravelServiceProvider::class 
    4. ], 

    1. 'aliases' => [ 
    2.     // 前面很多 
    3.     'JWTAuth' => Tymon\JWTAuth\Facades\JWTAuth::class 

    在终端运行:

    1. php artisan vendor:publish --provider="Tymon\JWTAuth\Providers\LaravelServiceProvider" 
    会生成config/jwt.php 这是jwt的配置文件

    生成jwt的key到.env文件运行:

    1. php artisan jwt:secret 

    路由

    在routers/api.php

    中新建内容,两个路径分别是注册和登录:

    //这句接管路由
     

    1. $api = app('Dingo\Api\Routing\Router'); 
    2.  
    3. $api->version('v1'function ($api) { 
    4.  
    5. $api->post('login''App\Http\Controllers\Api\Auth\LoginController@login'); 
    6. $api->post('register''App\Http\Controllers\Api\Auth\RegisterController@register'); 
    7.  
    8. }); 


    生成两个controller

    终端输入:

    1. php artisan make:controller App\\Http\\Api\\Auth\\LoginController 
    2. php artisan make:controller App\\Http\\Api\\Auth\\RegisterController   

    数据库

    备置.env文件

    1. DB_CONNECTION=mysql 
    2. DB_HOST=127.0.0.1 
    3. DB_PORT=3306 
    4. DB_DATABASE=databasename 
    5. DB_USERNAME=root 
    6. DB_PASSWORD= 

    添加迁移文件,当然你也可以使用php artisan make:auth 安装Laravel自带的用户

    下面我们用新建的吧

    终端运行:

    1. php artisan make:model User -m  

    此命令可以添加迁移文件同时添加Model
    迁移文件一般在database/migrations/时间格式_create_users_table.php
    打开迁移文件修改以下内容:

    1. public function up() 
    2.     Schema::create('users'function (Blueprint $table) { 
    3.         $table->increments('id'); 
    4.         $table->string('name')->unique(); 
    5.         $table->string('email')->unique(); 
    6.         $table->string('password'); 
    7.         $table->rememberToken(); 
    8.         $table->timestamps(); 
    9.     }); 

    终端运行:php artisan migrate创建users表

    打开我们新建的Model在App/下User.php

    添加如下内容:
     

    1. use Illuminate\Notifications\Notifiable; 
    2. use Illuminate\Foundation\Auth\User as Authenticatable; 
    3. use Tymon\JWTAuth\Contracts\JWTSubject; 
    4.  
    5. class User extends Authenticatable implements JWTSubject 
    6.     use Notifiable; 
    7.  
    8.     /** 
    9.      * The attributes that are mass assignable. 
    10.      * 
    11.      * @var array 
    12.      */ 
    13.     protected $fillable = [ 
    14.         'name''email''password'
    15.     ]; 
    16.  
    17.     /** 
    18.      * The attributes that should be hidden for arrays. 
    19.      * 
    20.      * @var array 
    21.      */ 
    22.     protected $hidden = [ 
    23.         'password''remember_token'
    24.     ]; 
    25.  
    26.     /** 
    27.      * Get the identifier that will be stored in the subject claim of the JWT. 
    28.      * 
    29.      * @return mixed 
    30.      */ 
    31.     public function getJWTIdentifier() 
    32.     { 
    33.         return $this->getKey(); 
    34.     } 
    35.  
    36.     /** 
    37.      * Return a key value array, containing any custom claims to be added to the JWT. 
    38.      * 
    39.      * @return array 
    40.      */ 
    41.     public function getJWTCustomClaims() 
    42.     { 
    43.         return []; 
    44.     } 


    注册

    在之前建的App/Http/Controller/Api/Auth/RegisterController.php
    添加如下内容:
     

    1. use App\Http\Controllers\Controller; 
    2. use App\User; 
    3. use Dingo\Api\Exception\StoreResourceFailedException; 
    4. use Dingo\Api\Routing\Helpers; 
    5. use Illuminate\Foundation\Auth\RegistersUsers; 
    6. use Illuminate\Http\Request; 
    7. use Illuminate\Support\Facades\Validator; 
    8. use Tymon\JWTAuth\Facades\JWTAuth; 
    9.  
    10. class RegisterController extends Controller 
    11.     use RegistersUsers; 
    12.     use Helpers; 
    13.  
    14.     public function register(Request $request){ 
    15.  
    16.         $validator = $this->validator($request->all()); 
    17.         if($validator->fails()){ 
    18.             throw new StoreResourceFailedException("Validation Error"$validator->errors()); 
    19.         } 
    20.  
    21.         $user = $this->create($request->all()); 
    22.  
    23.         if($user){ 
    24.  
    25.             $token = JWTAuth::fromUser($user); 
    26.  
    27.             return $this->response->array([ 
    28.                 "token" => $token
    29.                 "message" => "User created"
    30.                 "status_code" => 201 
    31.             ]); 
    32.         }else
    33.             return $this->response->error("User Not Found...", 404); 
    34.         } 
    35.     } 
    36.  
    37.     protected function validator(array $data
    38.     { 
    39.         return Validator::make($data, [ 
    40.             'name' => 'required|unique:users'
    41.             'email' => 'required|email|max:255|unique:users'
    42.             'password' => 'required|min:6'
    43.         ]); 
    44.     } 
    45.  
    46.     protected function create(array $data
    47.     { 
    48.         return User::create([ 
    49.             'name' => $data['name'], 
    50.             'email' => $data['email'], 
    51.             'password' => bcrypt($data['password']), 
    52.         ]); 
    53.     } 
    54.  

    打开Postman进行测试地址:http://127.0.0.1/myApiProject/public/api/register

    laravel5.4 + dingo api + jwt接口token实战配置讲解

    登录

    在之前建的App/Http/Controller/Api/Auth/LoginController.php
     

    1. use App\User; 
    2. use Dingo\Api\Routing\Helpers; 
    3. use Illuminate\Foundation\Auth\AuthenticatesUsers; 
    4. use Illuminate\Http\Request; 
    5. use App\Http\Controllers\Controller; 
    6. use Illuminate\Support\Facades\Hash; 
    7. use Symfony\Component\HttpKernel\Exception\UnauthorizedHttpException; 
    8. use Tymon\JWTAuth\Facades\JWTAuth; 
    9.  
    10. class LoginController extends Controller 
    11.     use AuthenticatesUsers; 
    12.     use Helpers; 
    13.  
    14.     public function login(Request $request){ 
    15.  
    16.         $user = User::where('email'$request->email)->orWhere('name'$request->email)->first(); 
    17.  
    18.         if($user && Hash::check($request->get('password'), $user->password)){ 
    19.             $token = JWTAuth::fromUser($user); 
    20.             return $this->sendLoginResponse($request$token); 
    21.         } 
    22.  
    23.         return $this->sendFailedLoginResponse($request); 
    24.     } 
    25.  
    26.     public function sendLoginResponse(Request $request$token){ 
    27.         $this->clearLoginAttempts($request); 
    28.  
    29.         return $this->authenticated($token); 
    30.     } 
    31.  
    32.     public function authenticated($token){ 
    33.         return $this->response->array([ 
    34.             'token' => $token
    35.             'status_code' => 200, 
    36.             'message' => 'User Authenticated' 
    37.         ]); 
    38.     } 
    39.  
    40.     public function sendFailedLoginResponse(){ 
    41.         throw new UnauthorizedHttpException("Bad Credentials"); 
    42.     } 
    43.  
    44.     public function logout(){ 
    45.         $this->guard()->logout(); 
    46.     } 
    47.  } 

    打开Postman进行测试地址:http://127.0.0.1/myApiProject/public/api/register

    laravel5.4 + dingo api + jwt接口token实战配置讲解

    可以看到我们得到了token

    拉取用户信息
    在routers/api.php添加

    1. $api->group(['middleware' => 'api.auth'], function ($api) { 
    2.     $api->get('user''App\Http\Controllers\Api\UsersController@index'); 
    3. }); 


    终端运行:

    1. php artisan make:controller App\\Http\\Controllers\\Api\\UsersController 

    在UsersController.php中添加

    1. namespace App\Http\Controllers\Api; 
    2.  
    3. use Dingo\Api\Routing\Helpers; 
    4. use Illuminate\Routing\Controller; 
    5.  
    6. class UsersController extends Controller 
    7.     use Helpers; 
    8.  
    9.     public function __construct() 
    10.     { 
    11.         $this->middleware('api.auth'); 
    12.     } 
    13.     public function index(){ 
    14. //        return User::all(); 
    15.         $user = $this->auth->user(); 
    16.  
    17.         return $user
    18.     } 

    打开Postman进行测试地址:http://127.0.0.1/myApiProject/public/api/user
    注意因为我们设定了需要token才能拉取数据,所以在请求头Header中
    我们添加了:Authorization :Bearer + token
    Bearer是一种token_type在源码中有提到,应该是一种标准 

    laravel5.4 + dingo api + jwt接口token实战配置讲解
     

    转载请注明(B5教程网)原文链接:http://www.bcty365.com/content-153-5904-1.html
    相关热词搜索: Laravel5 dingo接口
    网友评论: