PHP

首页 -  PHP  -  laravel5.4接口token认证

laravel5.4接口token认证

很多人在api认证的时候很头疼下面我为大家介绍一种简答的方法发,小程序api接口认证也可以用的到;

一 数据库:

CREATE TABLE `admin_token_user` (
   `id` int(11) unsigned NOT NULL AUTO_INCREMENT,
   `username` varchar(60) NOT NULL,
   `password` varchar(255) NOT NULL,
   PRIMARY KEY (`id`,`username`)
 ) ENGINE=InnoDB AUTO_INCREMENT=2 DEFAULT CHARSET=utf8
 
 CREATE TABLE `admin_token` (
   `token` varchar(255) NOT NULL,
   `expire` varchar(30) NOT NULL COMMENT '过期时间',
   `uid` int(11) NOT NULL,
   PRIMARY KEY (`token`)
 ) ENGINE=InnoDB DEFAULT CHARSET=utf8

二api漏油:

//写在api漏油文件里
Route::post('user/auth', 'APi\UserAuthController@getAuth');

Route::group(['middleware'=>'checkApi','namespace' => 'Api'], function(){

//这里的漏油就需要待上token认证了
});

三验证中间键:

<?php

namespace App\Http\Middleware;
use Closure;
use Illuminate\Support\Facades\DB;

class CheckApi
{
    public function handle($request, Closure $next)
    {
        $errors = new \stdClass();
        $Authorization = $request->header('Authorization');
        $res = DB::table('admin_token')->where('token',$Authorization)->first();
        if( $res )
        {
            if( $res->expire < time() )
            {
                $errors->stCode = 500;
                $errors->msg = 'token验证失败';
                return response()->json($errors, 500);
            }

        }else
        {
            $errors->stCode = 500;
            $errors->msg = 'token验证失败';
            return response()->json($errors, 500);
        }
        return $next($request);
    }
}


四 获取token:

<?php
namespace App\Http\Controllers\APi;
use Illuminate\Http\Request;
use Illuminate\Support\Facades\Cache;
use Illuminate\Support\Facades\DB;
use Illuminate\Support\Facades\Hash;

class UserAuthController  extends BaseApiController
{

    /**
     * @param Request $request
     * @return \Illuminate\Http\JsonResponse
     * 返回密钥
     */
  public function getAuth( Request $request )
  {
      //密码 admin 用户 xiaoshu 加密 哈希
      $data['username'] = trim($request->input('username'));
      $password = trim($request->input('password'));
      $res = DB::table('admin_token_user')->where($data)->first();
      $errors = new \stdClass();
      if( $res )
      {
          if( Hash::check($password,$res->password) )
          {
              $token = encrypt(microtime());
              $expire = time()+604800; //7天
              DB::table('admin_token')->insert([
                  'uid'=>$res->id,
                  'expire'=>$expire, //7天
                  'token'=> $token,
              ]);
              $errors->msg = '登陆成功';
              $errors->token = $token;
              $errors->expire = $expire;
              return response()->json($errors, 200);

          }else
          {
              $errors->msg = '登陆失败';
              $errors->token = '';
              return response()->json($errors, 422);
          }
      }
      $errors->msg = '登陆失败';
      $errors->token = '';
      return response()->json($errors, 422);
  }

用法:用户先请求 user/auth这个地址传用户名和密码返回token 这个用户名在数据库添加,然后在访问其他地址的时候就要将token带在header里参数名称为

Authorization
(0)
分享:

本文由:xiaoshu168 作者:xiaoshu发表,转载请注明来源!

标签:

相关阅读