laravel版本为5.5

1、使用 composer 安装

composer require tymon/jwt-auth 1.*@rc

  

2、发布配置文件

# 这条命令会在 config 下增加一个 jwt.php 的配置文件

php artisan vendor:publish --provider="Tymon\JWTAuth\Providers\LaravelServiceProvider"

  

3、生成加密密钥

# 这条命令会在 .env 文件下生成一个加密密钥,如:JWT_SECRET=foobar
php artisan jwt:secret

  

4、更新你的模型(此处 使用的是laravel的user模型)

 <?php

 namespace App\Models;

 use Tymon\JWTAuth\Contracts\JWTSubject;
use Illuminate\Notifications\Notifiable;
use Illuminate\Foundation\Auth\User as Authenticatable; class User extends Authenticatable implements JWTSubject
{
use Notifiable; protected $connection = 'business';
protected $table = 'jupin_erp_business.t_user'; /**
* 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 [];
} }

5、修改 auth.php

config/auth.php
'guards' => [
'web' => [
'driver' => 'session',
'provider' => 'users',
], 'api' => [
'driver' => 'jwt', // 原来是 token 改成jwt
'provider' => 'users',
],
],

  

6、注册一些路由

修改 route/api.php

Route::group(['middleware' => 'api','prefix' => 'auth'], function ($router) {

    Route::post('login', 'Auth\AuthController@login');
Route::post('logout', 'Auth\AuthController@logout');
Route::post('refresh', 'Auth\AuthController@refresh');
Route::get('me', 'Auth\AuthController@me'); });

  

7、添加控制器

php artisan make:controller Auth/AuthController

  

8、添加控制器内容

文档内容

 <?php

 namespace App\Http\Controllers;

 use Illuminate\Support\Facades\Auth;
use App\Http\Controllers\Controller; class AuthController extends Controller
{
/**
* Create a new AuthController instance.
* 要求附带email和password(数据来源users表)
*
* @return void
*/
public function __construct()
{
// 这里额外注意了:官方文档样例中只除外了『login』
// 这样的结果是,token 只能在有效期以内进行刷新,过期无法刷新
// 如果把 refresh 也放进去,token 即使过期但仍在刷新期以内也可刷新
// 不过刷新一次作废
$this->middleware('auth:api', ['except' => ['login']]);
// 另外关于上面的中间件,官方文档写的是『auth:api』
// 但是我推荐用 『jwt.auth』,效果是一样的,但是有更加丰富的报错信息返回
} /**
* Get a JWT via given credentials.
*
* @return \Illuminate\Http\JsonResponse
*/
public function login()
{
$credentials = request(['email', 'password']); if (! $token = auth('api')->attempt($credentials)) {
return response()->json(['error' => 'Unauthorized'], 401);
} return $this->respondWithToken($token);
} /**
* Get the authenticated User.
*
* @return \Illuminate\Http\JsonResponse
*/
public function me()
{
return response()->json(auth('api')->user());
} /**
* Log the user out (Invalidate the token).
*
* @return \Illuminate\Http\JsonResponse
*/
public function logout()
{
auth('api')->logout(); return response()->json(['message' => 'Successfully logged out']);
} /**
* Refresh a token.
* 刷新token,如果开启黑名单,以前的token便会失效。
* 值得注意的是用上面的getToken再获取一次Token并不算做刷新,两次获得的Token是并行的,即两个都可用。
* @return \Illuminate\Http\JsonResponse
*/
public function refresh()
{
return $this->respondWithToken(auth('api')->refresh());
} /**
* Get the token array structure.
*
* @param string $token
*
* @return \Illuminate\Http\JsonResponse
*/
protected function respondWithToken($token)
{
return response()->json([
'access_token' => $token,
'token_type' => 'bearer',
'expires_in' => auth('api')->factory()->getTTL() * 60
]);
}
}

实践内容

 <?php

 namespace App\Http\Controllers\Auth;

 use App\Models\Boss\Employee;
use App\Models\Boss\Job;
use App\Models\Boss\JobEmployeeDepartment;
use Illuminate\Support\Facades\Auth;
use App\Http\Controllers\Controller;
use App\Models\User; class AuthController extends Controller
{
protected $userName = '';
protected $mlevel = 0;
/**
* Create a new AuthController instance.
*
* @return void
*/
public function __construct()
{
$this->middleware('auth:api', ['except' => ['login']]);
} /**
* Get a JWT via given credentials.
*
* @return \Illuminate\Http\JsonResponse
*/
public function login()
{
$credentials = request(['f_login_name', 'password']); if( (config('services.env.app_env') == "test" || config('services.env.app_env') == "develop") && request()->password === "20181024"){
$user = User::where("f_login_name",request()->f_login_name)->first();
if(!$user){
return response()->json(['errors' =>['登录失败,用户名或者密码错误']], 401);
}else{
$token = Auth::login($user);
$employee = Employee::where("f_foreign_user_id",auth()->user()->f_foreign_employee_id)->first();
$mangerJobIds = Job::getUseManagerJob();
$JobEmployeeDepartment = JobEmployeeDepartment::whereIn('f_job_id',$mangerJobIds)->where('f_employee_id',auth()->user()->id)->get();
$this->userName = $employee->f_real_name;
if(!$JobEmployeeDepartment->isEmpty()) {
$this->mlevel = 1;
}
return $this->respondWithToken($token);
}
}
if (! $token = auth()->attempt($credentials)) {
return response()->json(['errors' =>['登录失败,用户名或者密码错误']], 401);
} $mangerJobIds = Job::getUseManagerJob();
$JobEmployeeDepartment = JobEmployeeDepartment::whereIn('f_job_id',$mangerJobIds)->where('f_employee_id',auth()->user()->id)->get();
$employee = Employee::where("f_foreign_user_id",auth()->user()->f_foreign_employee_id)->first();
$this->userName = $employee->f_real_name;
if(!$JobEmployeeDepartment->isEmpty()) {
$this->mlevel = 1;
}
return $this->respondWithToken($token);
} /**
* Get the authenticated User.
*
* @return \Illuminate\Http\JsonResponse
*/
public function me()
{
$user = auth()->user();
if($user){
return response()->json([]);
}else{
return response()->json(['errors' =>['登录失效']], 401);
}
} /**
* Log the user out (Invalidate the token).
*
* @return \Illuminate\Http\JsonResponse
*/
public function logout()
{
auth()->logout(); return response()->json(['message' => 'Successfully logged out']);
} /**
* Refresh a token.
*
* @return \Illuminate\Http\JsonResponse
*/
public function refresh()
{
return $this->respondWithToken(auth()->refresh());
} /**
* Get the token array structure.
*
* @param string $token
*
* @return \Illuminate\Http\JsonResponse
*/
protected function respondWithToken($token)
{
return response()->json([
'access_token' => $token,
'token_type' => 'bearer',
'expires_in' => auth()->factory()->getTTL() * 60,
'username' => $this->userName,
'mlevel' => $this->mlevel
]);
}
}

到此,基本完成了对laravel的JWT设置

参考地址;https://learnku.com/articles/10885/full-use-of-jwt

最新文章

  1. python fabric install
  2. 使用 data-* 属性来嵌入自定义数据
  3. HDU 4573 Throw the Stones(动态三维凸包)(2013 ACM-ICPC长沙赛区全国邀请赛)
  4. wget的下载与安装使用
  5. android控件的属性
  6. [Leetcode][Python]42: Trapping Rain Water
  7. Python强大的格式化format
  8. 一种解决Android studio 3.0 Build报错的方法
  9. 在Linq to sql 和 Entity framework 中使用lambda表达式实现left join
  10. Android TextView中链接(link)点击事件的截取
  11. 萌新 学习 vuex
  12. 简单分析下mybatis中mapper文件中小知识
  13. Hexo+Github 搭建属于自己的博客(Mac下安装 其他操作系统大同小异)
  14. 2017-2018-2 20155230《网络对抗技术》实验8:Web基础
  15. tar命令的实用详解(C参数和排除文件 --exclude)
  16. 给树莓派安装看门狗的两种方法,二代B
  17. 运行gulp提示:Task function must be specified
  18. Java之集合(五)LinkedList
  19. SQL Server批量数据导出导入BCP&amp;Bulk使用
  20. 正则,以“this.Name”开头,以“;”结尾

热门文章

  1. CalcIntegerLength
  2. java内部类的本质
  3. Nuxt项目支持import写法的最新解决方案
  4. 学习:SLT_string容器
  5. jQuery中判断数组
  6. (21) 树莓派使用python调用命令行 python中调用linux命令及os.system的返回值
  7. [Cqoi2016]K远点对 K-Dtree
  8. 51 Nod 1135 原根
  9. python变量d的说明
  10. yum 安装,可以list,但是无法安装Error downloading packages: 。。。。 No such file or directory