laravel 5.4 + dingo api + jwt 代替Passport
2017-08-02 00:00
465 查看
由于在度娘找了半天根本一大堆Copy版本,弄得我死去活来的,每个都试了一堆问题,到底你们做完有没有总结过一次?然后有几个使用lunmen+dingo api+jwt,完全不行啊,太监版不是我想要的。
后来Google,终于找到例子并实测成功。直接来了
在
发布配置文件
终端运行
打开
下面是我的配置:
没必要每个都配上去,主要的配一下就可以了
其实只需要加上,下面是我的写法,上面是国外的写法
运行
添加jwt的认证
在
在
在终端运行:
会生成
生成
中新建内容,两个路径分别是注册和登录:
生成两个controller
终端输入:
添加迁移文件,当然你也可以使用
下面我们用新建的吧
终端运行:
此命令可以添加迁移文件同时添加Model
迁移文件一般在
打开迁移文件修改以下内容:
终端运行:
打开我们新建的
添加如下内容:
添加如下内容:
打开
打开
可以看到我们得到了token
终端运行:
在
打开
注意因为我们设定了需要
我们添加了:
后来Google,终于找到例子并实测成功。直接来了
新装一个LV
composer create-project --prefer-dist laravel/laravel myApiProject
安装dingo api
在composer.json中添加composer require dingo/api:1.0.x@dev
在
config/app.php
'providers' => [ //前面很多 Dingo\Api\Provider\LaravelServiceProvider::class, ]
发布配置文件
终端运行
php artisan vendor:publish --provider="Dingo\Api\Provider\LaravelServiceProvider"
打开
.env文件,把dingo的配置放到最后面
API_STANDARDS_TREE=vnd // 环境 API_SUBTYPE=myapp // 子类型 API_PREFIX=api // 前缀 API_DOMAIN=api.myapp.com //子域名 (前缀和子域名只能存在一个)可选 API_VERSION=v1 // 版本 API_NAME=My API // 名字(使用API Blueprint命令才会用到) API_CONDITIONAL_REQUEST=false // 带条件的请求 API_STRICT=false // Strict模式 API_DEFAULT_FORMAT=json // 响应格式 API_DEBUG=true // 调试模式
下面是我的配置:
API_STANDARDS_TREE=vnd API_SUBTYPE=emall API_PREFIX=api API_VERSION=v1
没必要每个都配上去,主要的配一下就可以了
安装jwt
还是composer.json
"require-dev": { "tymon/jwt-auth": "1.0.*" }, "minimum-stability": "dev", "prefer-stable": true
其实只需要加上,下面是我的写法,上面是国外的写法
"tymon/jwt-auth": "1.0.*@dev"
运行
composer update将dingo和jwt装上去
添加jwt的认证
在
config/api.php添加内容
'auth' => [ 'jwt' => Dingo\Api\Auth\Provider\JWT::class ]
在
config/app.php
'providers' => [ // 前面很多 Tymon\JWTAuth\Providers\LaravelServiceProvider::class ], 'aliases' => [ // 前面很多 'JWTAuth' => Tymon\JWTAuth\Facades\JWTAuth::class ]
在终端运行:
php artisan vendor:publish --provider="Tymon\JWTAuth\Providers\LaravelServiceProvider"
会生成
config/jwt.php这是
jwt的配置文件
生成
jwt的
key到
.env文件运行:
php artisan jwt:secret
路由
在routers/api.php
中新建内容,两个路径分别是注册和登录:
//这句接管路由 $api = app('Dingo\Api\Routing\Router'); $api->version('v1', function ($api) { $api->post('login', 'App\Http\Controllers\Api\Auth\LoginController@login'); $api->post('register', 'App\Http\Controllers\Api\Auth\RegisterController@register'); });
生成两个controller
终端输入:
php artisan make:controller App\\Http\\Api\\Auth\\LoginController php artisan make:controller App\\Http\\Api\\Auth\\RegisterController
数据库
备置.env文件
DB_CONNECTION=mysql DB_HOST=127.0.0.1 DB_PORT=3306 DB_DATABASE=databasename DB_USERNAME=root DB_PASSWORD=
添加迁移文件,当然你也可以使用
php artisan make:auth安装LV自带的用户
下面我们用新建的吧
终端运行:
php artisan make:model User -m
此命令可以添加迁移文件同时添加Model
迁移文件一般在
database/migrations/时间格式_create_users_table.php
打开迁移文件修改以下内容:
public function up() { Schema::create('users', function (Blueprint $table) { $table->increments('id'); $table->string('name')->unique(); $table->string('email')->unique(); $table->string('password'); $table->rememberToken(); $table->timestamps(); }); }
终端运行:
php artisan migrate创建
users表
打开我们新建的
Model在
App/下
User.php
添加如下内容:
use Illuminate\Notifications\Notifiable; use Illuminate\Foundation\Auth\User as Authenticatable; use Tymon\JWTAuth\Contracts\JWTSubject; class User extends Authenticatable implements JWTSubject { use Notifiable; /** * The attributes that are mass assignable. * * @var array */ protected $fillable = [ 'name', 'email', 'password', ]; /** * The attributes that should be hidden for arrays. * * @var array */ protected $hidden = [ 'password', 'remember_token', ]; /** * Get the identifier that will be stored in www.10rz.net the subject claim of the JWT. * * @return mixed */ public function getJWTIdentifier() { return $this->getKey(); } /** * Return a key value array, containing any custom claims to be added to the JWT. * * @return array */ public function getJWTCustomClaims() { return []; } }
注册
在之前建的App/Http/Controller/Api/Auth/RegisterController.php
添加如下内容:
use App\Http\Controllers\Controller; use App\User; use Dingo\Api\Exception\StoreResourceFailedException; use Dingo\Api\Routing\Helpers; use Illuminate\Foundation\Auth\RegistersUsers; use Illuminate\Http\Request; use Illuminate\Support\Facades\Validator; use Tymon\JWTAuth\Facades\JWTAuth; class RegisterController extends Controller { use RegistersUsers; use Helpers; public function register(Request $request){ $validator = $this->validator($request->all()); if($validator->fails()){ throw new StoreResourceFailedException("Validation Error", $validator->errors()); } $user = $this->create($request->all()); if($user){ $token = JWTAuth::fromUser($user); return $this->response->array([ "token" => $token, "message" => "User created", "status_code" => 201 ]); }else{ return $this->response->error("User Not Found...", 404); } } protected function validator(array $data) { return Validator::make($data, [ 'name' => 'required|unique:users', 'email' => 'required|email|max:255|unique:users', 'password' => 'required|min:6', ]); } protected function create(array $data) { return User::create([ 'name' => $data['name'], 'email' => $data['email'], 'password' => bcrypt($data['password']), ]); } }
打开
Postman进行测试地址:http://127.0.0.1/myApiProject...
登录
在之前建的App/Http/Controller/Api/Auth/LoginController.php
use App\User; use Dingo\Api\Routing\Helpers; use Illuminate\Foundation\Auth\AuthenticatesUsers; use Illuminate\Http\Request; use App\Http\Controllers\Controller; use Illuminate\Support\Facades\Hash; use Symfony\Component\HttpKernel\Exception\UnauthorizedHttpException; use Tymon\JWTAuth\Facades\JWTAuth; class LoginController extends Controller { use AuthenticatesUsers; use Helpers; public function login(Request $request){ $user = User::where('email', $request->email)->orWhere('name', $request->email)->first(); if($user && Hash::check($request->get('password'), $user->password)){ $token = JWTAuth::fromUser($user); return $this->sendLoginResponse($request, $token); } return $this->sendFailedLoginResponse($request); } public function sendLoginResponse(Request $request, $token){ $this->clearLoginAttempts($request); return $this->authenticated($token); } public function authenticated($token){ return $this->response->array([ 'token' => $token, 'status_code' => 200, 'message' => 'User Authenticated' ]); } public function sendFailedLoginResponse(){ throw new UnauthorizedHttpException("Bad Credentials"); } public function logout(){ $this->guard()->logout(); } }
打开
Postman进行测试地址:http://127.0.0.1/myApiProject...
可以看到我们得到了token
拉取用户信息
在routers/api.php添加
$api->group(['middleware' => 'api.auth'], function ($api) { $api->get('user', 'App\Http\Controllers\Api\UsersController@index'); });
终端运行:
php artisan make:controller App\\Http\\Controllers\\Api\\UsersController
在
UsersController.php中添加
namespace App\Http\Controllers\Api; use Dingo\Api\Routing\Helpers; use Illuminate\Routing\Controller; class UsersController extends Controller { use Helpers; public function __construct() { $this->middleware('api.auth'); } public function index(){ // return User::all(); $user = $this->auth->user(); return $user; } }
打开
Postman进行测试地址:http://127.0.0.1/myApiProject...
注意因为我们设定了需要
token才能拉取数据,所以在请求头
Header中
我们添加了:
Authorization :Bearer + token
Bearer是一种
token_type在源码中有提到,应该是一种标准
相关文章推荐
- laravel 5.4 + dingo api + jwt
- Laravel实现dingo+JWT api接口之实战篇
- Laravel实现dingo+JWT api接口之配置篇
- Dingo + Laravel + JWT + Entrust + memcache 实现API设计
- Laravel 5.4建站06--API 认证系统 Passport
- Laravel5.2+Dingo/API+JWTauth的想着问题
- lumen5.4整合dingo/api、jwt-auth
- Laravel实现dingo+JWT api接口之配置篇
- Laravel5.5+passport 放弃 dingo 开发 API 实战,让 API 开发更省心
- laravel5.4 使用Dingo/Api v2.0+Passport实现api认证
- Laravel 5 开发API(Dingo Api + JWT)
- Laravel5.3开发API(Dingo+Passport+Swagger)
- Laravel & Lumen RESTFul API 扩展包:Dingo API(一) —— 安装配置篇
- laravel dingo API返回自定义错误信息
- laravel 开发RestFul接口【一、集成三方扩展 - dingo/api】
- Lumen上使用Dingo/Api做API开发时用JWT-Auth做认证的实现
- Laravel & Lumen RESTFul API 扩展包:Dingo API(一) —— 安装配置篇
- Laravel 5 中使用 JWT(Json Web Token) 实现基于API的用户认证
- laravel中api验证jwt刷新token的一个问题
- Laravel & Lumen RESTFul API 扩展包:Dingo API(二) —— 创建 API Endpoint(路由)