安装以及配置步骤
1、安装一个larave项目
(1) composer create-project laravel/laravel project-name --prefer-dist "5.5.*"
(2) 修改config目录下的app.php
'timezone' => 'Asia/Shanghai',
'locale' => 'zh-CN'
2、Dingo + Jwt 安装以及配置步骤
(1) composer.json 引入包,执行composer update
"require": {
...
"dingo/api": "2.0.*@dev",
"tymon/jwt-auth": "dev-develop"
},
或者分别执行以下两条命令:
1: composer require dingo/api "2.0.*@dev"
2: composer require tymon/jwt-auth "dev-develop"
(2) 在目录config的app.php下
"providers"=>[
...
Dingo\Api\Provider\LaravelServiceProvider::class,
Tymon\JWTAuth\Providers\LaravelServiceProvider::class,
],
'aliases' => [
...
'JWTAuth' => Tymon\JWTAuth\Facades\JWTAuth::class,
'JWTFactory' => Tymon\JWTAuth\Facades\JWTFactory::class
]
(3) 执行下面两个语句自动生成 dingo 和 jwt 的配置文件
php artisan vendor:publish --provider="Dingo\Api\Provider\LaravelServiceProvider"
php artisan vendor:publish --provider="Tymon\JWTAuth\Providers\LaravelServiceProvider"
(4) 打开.env文件,把dingo的配置放到最后面
API_STANDARDS_TREE=vnd # 环境
API_SUBTYPE=myapp # 子类型
API_PREFIX=api #前缀
API_VERSION=v1 # 版本
API_NAME="Dingo API" # 名字(使用API Blueprint命令才会用到)
API_STRICT=false # Strict模式
API_DEFAULT_FORMAT=json # 响应格式
API_DEBUG=false # 调试模式
(5) 生成 Jwt 密钥
php artisan jwt:secret
(6) 在目录config的api.php下
'auth' => [
'jwt' => Dingo\Api\Auth\Provider\JWT::class
]
3、接下来就可以开始使用了
(1) 创建 api 路由
在router/api下新建如下内容
$api = app('Dingo\Api\Routing\Router');
$api->version('v1', function ($api) {
$api->group(['namespace' => 'App\Http\Controllers\Api\V1'], function ($api) {
// 用户注册登录
$api->post('login', 'AuthController@login');
$api->post('register', 'AuthController@register');
// 所有的需要接口验证从这里开始
$api->group(['middleware' => 'jwt.auth'], function ($api) {
//用户基本信息
$api->get('me', 'UserController@index');
});
});
});
(2) 创建 Users Model
<?php
namespace App\Models;
use Illuminate\Notifications\Notifiable;
use Illuminate\Foundation\Auth\User as Authenticatable;
use Tymon\JWTAuth\Contracts\JWTSubject;
class Users extends Authenticatable implements JWTSubject
{
use Notifiable;
/**
* The attributes that are mass assignable.
*
* @var array
*/
protected $fillable = [
'username',
'email',
'password',
];
/**
* @var array
*/
protected $hidden = ['password','remember_token'];
/**
* @return mixed
*/
public function getJWTIdentifier(){
return $this->getKey();
}
/**
* @return array
*/
public function getJWTCustomClaims(){
return [];
}
}
(3)创建注册登录实例
<?php
namespace App\Http\Controllers\Api\V1;
use App\Http\Controllers\Controller;
use App\Models\Users;
use Illuminate\Http\Request;
use Illuminate\Support\Facades\Hash;
use Illuminate\Support\Facades\Validator;
use Tymon\JWTAuth\Facades\JWTAuth;
use Tymon\JWTAuth\Exceptions\JWTException;
use Illuminate\Foundation\Auth\AuthenticatesUsers;
/**
* 登录注册
* Class AuthController
* @package App\Http\Controllers\Api\V1
*/
class AuthController extends Controller
{
use AuthenticatesUsers;
/**
* 登录
* @return \Illuminate\Http\JsonResponse
*/
public function login()
{
$credentials = app()->request->only('username', 'password');
$userRow = Users::where('username', app()->request->username)->first();
if (!$userRow) {
return $this->response->array([
'status_code' => 400,
'message' => '用户不存在',
]);
}
if (!Hash::check(app()->request->password, $userRow->password)) {
return $this->response->array([
'status_code' => 400,
'message' => '密码不正确',
]);
}
try {
if (!$token = JWTAuth::attempt($credentials)) {
return $this->response->array([
'status_code' => 400,
'message' => '无效证件',
]);
}
} catch (JWTException $e) {
return $this->response->array([
'status_code' => 400,
'message' => '无法创建令牌',
]);
}
return $this->response->array([
'token' => $token,
'status_code' => 200,
'message' => 'OK',
]);
}
/**
* 用户注册
* @param Request $request
* @return mixed
*/
public function register(Request $request)
{
$rules = [
'username' => ['required'],
'password' => ['required', 'min:6', 'max:20'],
];
$param = $request->only('username', 'password');
$validator = Validator::make($param, $rules);
//验证用户
$isName = Users::where(['username' => $request->get('username')])->first();
if ($isName) {
return $this->response->array([
'status_code' => 400,
'message' => '用户名已被注册',
]);
}
// 验证格式
if ($validator->fails()) {
return $this->response->array([
'status_code' => 400,
'message' => $validator->errors(),
]);
}
// 创建用户
$insertUserResult = Users::create([
'username' => $request->get('username'),
'password' => bcrypt($request->get('password')),
'created_at' => date('Y-m-d H:i:s')
]);
if (!$insertUserResult) {
return $this->response->array([
'status_code' => 400,
'message' => '注册失败',
]);
}
return $this->response->array([
'status_code' => 200,
'message' =>'注册成功',
]);
}
}
注意: 记得每次请求的接口的时候在Headers 头部带上 : Authorization :Bearer + token