Laravel5.4简单实现app接口Api Token认证方法


Posted in PHP onAugust 29, 2019

我是小白,今天写这篇文章主要是给新手学习看的,大佬就不用看了,有很多不足望大家指出,共同进步。

在开发中许多 API 通常在返回响应之前都需要某种形式的认证,有些时候,一个认证的请求和一个未认证的请求,响应可能不同。

在web项目中,实现认证比较轻松,那么前后端分离的项目中,我们要怎么实现认证,今天这篇文章就以 API token 认证机制,使用Token可以解决laravel API的无状态认证。

一、给用户表users增加api_token字段

php artisan make:migration add_api_token_to_users

首先,给用户表中增加 api_token字段,在生成的迁移文件中添加字段:

<?php
 
use Illuminate\Support\Facades\Schema;
use Illuminate\Database\Schema\Blueprint;
use Illuminate\Database\Migrations\Migration;
 
class AddApiTokenToUsers extends Migration
{
 /**
  * Run the migrations.
  *
  * @return void
  */
 public function up()
 {
  Schema::table('users', function (Blueprint $table) {
   $table->string('api_token', 64)->unique();
  });
 }
 
 /**
  * Reverse the migrations.
  *
  * @return void
  */
 public function down()
 {
  Schema::table('users', function (Blueprint $table) {
   $table->dropColumn(['api_token']); //新增加的
  });
 }
}

二、然后使用下面的命令将字段添加到表中:

php artisan migrate

三、用户注册:

在注册的控制器文件的创建用户中添加 api_token 字段:

我这里的控制器是App\Http\Controllers\Api\RegisterController.php

protected function register(Request $request)
 {
  $input = $request->all(); //获取传过来的传数 
 
 //在这里设置生成token后,与账号密码等信息一起存进User表
 
  $user = User::create($data); //存进数据库
 return $token; 
 //这里面的逻辑自己写 我这里只是简单实现
}

最后,不要忘记在 App\User.php用户模型表中的 $fillable 属性当中添加api_token字段:

/**
  * The attributes that are mass assignable.
  *
  * @var array
  */
 protected $fillable = [
  'name', 'email', 'password','confirmation_token','api_token'
 ];

四、修改api driver:

接下来要在config\auth.php 修改如下内容:

'guards' => [
  'web' => [
   'driver' => 'session',
   'provider' => 'users',
  ],
 
  'api' => [
   'driver' => 'token', //把driver设置为token
   'provider' => 'users',
  ],
 ],

五、如何使用:

接下来,我们要添加路由,在routes\api.php文件修改:

Route::group(['middleware' => 'token'], function(){
 Route::post('register', 'API\UserController@register'); 
});

怎么访问?我们这里用postman来测试:

Laravel5.4简单实现app接口Api Token认证方法

到些就大功告成了! 注意,这个只是基础认证,现在开发还是用别人已经开发好的插件好,比如oAuth2,basic,jwt,Passport等等。

哦对了,如果想看token的认证原理,我们可以看他的底层源码

vendor\laravel\framework\src\Illuminate\Auth\TokenGuard.php:

Laravel5.4简单实现app接口Api Token认证方法

这个我也看不明白,哈!再见!

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持三水点靠木。

PHP 相关文章推荐
复杂检索数据并分页显示的处理方法
Oct 09 PHP
php 网页游戏开发入门教程一(webgame+design)
Oct 26 PHP
php不用正则验证真假身份证
Nov 06 PHP
php ctype函数中文翻译和示例
Mar 21 PHP
php警告Creating default object from empty value 问题的解决方法
Apr 02 PHP
php验证session无效的解决方法
Nov 04 PHP
朋友网关于QQ相关的PHP代码(研究QQ的绝佳资料)
Jan 26 PHP
ajax+php控制所有后台函数调用
Jul 15 PHP
PHP指定截取字符串中的中英文或数字字符的实例分享
Mar 18 PHP
Nginx下ThinkPHP5的配置方法详解
Aug 01 PHP
PHP7.0连接DB操作实例分析【基于mysqli】
Sep 26 PHP
Laravel 微信小程序后端搭建步骤详解
Nov 26 PHP
thinkPHP5使用Rabc实现权限管理
Aug 28 #PHP
Thinkphp5框架ajax接口实现方法分析
Aug 28 #PHP
Thinkphp5框架实现图片、音频和视频文件的上传功能详解
Aug 27 #PHP
Thinkphp5框架使用validate实现验证功能的方法
Aug 27 #PHP
thinkPHP3.2使用RBAC实现权限管理的实现
Aug 27 #PHP
PHP如何将图片文件上传到另外一台服务器上
Aug 26 #PHP
PHP命名空间与自动加载机制的基础介绍
Aug 25 #PHP
You might like
CakePHP去除默认显示的标题及图标的方法
2008/10/22 PHP
写一段简单的PHP建立文件夹代码
2015/01/06 PHP
php需登录的文件上传管理系统
2020/03/21 PHP
JavaScript 获取事件对象的注意点
2009/07/29 Javascript
javascript showModalDialog 内跳转页面的问题
2010/11/25 Javascript
jQuery选择器中含有空格的使用示例及注意事项
2013/08/25 Javascript
nw.js实现类似微信的聊天软件
2015/03/16 Javascript
实现easyui的datagrid导出为excel的示例代码
2016/11/10 Javascript
js学习之----深入理解闭包
2016/11/21 Javascript
Node.JS利用PhantomJs抓取网页入门教程
2017/05/19 Javascript
详解在vue-cli中引用jQuery、bootstrap以及使用sass、less编写css
2017/11/08 jQuery
如何将你的AngularJS1.x应用迁移至React的方法
2018/02/01 Javascript
JavaScript实现获取select下拉框中第一个值的方法
2018/02/06 Javascript
关于redux-saga中take使用方法详解
2018/02/27 Javascript
vuejs 切换导航条高亮(路由菜单高亮)的方法示例
2018/05/29 Javascript
LayUi中接口传数据成功,表格不显示数据的解决方法
2018/08/19 Javascript
Angular项目如何升级至Angular6步骤全纪录
2018/09/03 Javascript
详解vue2.0 资源文件assets和static的区别
2018/11/27 Javascript
详解vue中router-link标签所必备了解的属性
2019/04/15 Javascript
解决layer.msg 不居中 ifram中的问题
2019/09/05 Javascript
js实现幻灯片轮播图
2020/08/14 Javascript
合并百度影音的离线数据( with python 2.3)
2015/08/04 Python
对python opencv 添加文字 cv2.putText 的各参数介绍
2018/12/05 Python
python 弹窗提示警告框MessageBox的实例
2019/06/18 Python
python模拟斗地主发牌
2020/04/22 Python
Python 使用Opencv实现目标检测与识别的示例代码
2020/09/08 Python
艺术用品:Arteza
2018/11/25 全球购物
欧洲最大的预定车位市场:JustPark
2020/01/06 全球购物
亚马逊新加坡官方网站:Amazon.sg
2020/03/25 全球购物
分公司经理任命书
2014/06/05 职场文书
2014年质检员工作总结
2014/11/18 职场文书
煤矿安全保证书
2015/02/27 职场文书
小学生大队委竞选稿
2015/11/20 职场文书
一年之计:2019年下半年的计划
2019/05/07 职场文书
无线电通信名词解释
2022/02/18 无线电
关于vue-router-link选择样式设置
2022/04/30 Vue.js