php dingo和jwt,三、Laravel5.4+Dingo+JWT 开发API

安装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

"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' => [

// 前面yes是很多

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\Controllers\Api\Auth\LoginController

php artisan make:controller App\Http\Controllers\Api\Auth\RegisterController

数据库

备置.env文件

DB_CONNECTION=mysql

DB_HOST=127.0.0.1

DB_PORT=3306

DB_DATABASE=databasename //数据库名

DB_USERNAME=root //账号

DB_PASSWORD= //密码

DB_PREFIX=mt_ //表前缀

添加迁移文件,当然你也可以使用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('user_id');

$table->string('user_name')->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;

protected $table="users";

protected $primaryKey = 'user_id';

/**

* The attributes that are mass assignable.

*

* @var array

*/

protected $fillable = [

'user_name', 'password',

];

/**

* The attributes that should be hidden for arrays.

*

* @var array

*/

protected $hidden = [

'password', 'remember_token',

];

/**

* Get the identifier that will be stored in 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

添加如下内容:

namespace App\Http\Controllers\Api\Auth;

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->save()){

$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, [

'user_name' => 'required|unique:users',

'password' => 'required|min:6',

]);

}

protected function create(array $data)

{

return User::create([

'user_name' => $data['user_name'],

'password' => bcrypt($data['password']),

]);

}

}

打开Postman进行测试地址:

94aeb1aaccec

图片.png

登录

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

namespace App\Http\Controllers\Api\Auth;

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('user_name', $request->user_name)->first();

if($user && Hash::check($request->get('password'), $user->password)){

$token = JWTAuth::fromUser($user);

$re2=User::where('user_id',$user->user_id)->update([

'remember_token'=>$token,

]);

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进行测试地址:

94aeb1aaccec

图片.png

登录成功我们得到了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 App\Http\Model\Users;

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 Users::all();

$user = $this->auth->user();

$users = Users::leftJoin('user_date', 'users.user_id', '=', 'user_date.user_id')

->select('users.user_id','users.sex','users.name','users.avatar','users.user_name', 'user_date.phone', 'user_date.email', 'user_date.postcode', 'user_date.working','user_date.address','user_date.approval_id', 'user_date.document_number', 'user_date.class_id', 'user_date.discipline_id', 'user_date.school_id' )

->find($user->user_id);

return $this->response->array([

'data' => $users,

'status_code' => 200,

'message' => 'User_info'

]);

}

}

打开Postman进行测试地址:

94aeb1aaccec

图片.png

注意因为我们设定了需要token才能拉取数据,所以在请求头Header中

我们添加了:Authorization :Bearer + token

Bearer是一种token_type在源码中有提到,应该是一种标准

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值