Laravel5.4 Api认证Demo
为大家提供一个简单的laravel api接口认证Demo路由 routes/api.phpRoute::group(['namespace' => 'Api'], function() {
//测试
Route::get('index', 'ApiBaseController@index');
//获取的token
Route::get('get-token', 'ApiBaseController@getToken');
});
2.定义配置文件 config下新建token.php
3.认证类<?php
namespace App\Http\Controllers\Api;
use Illuminate\Http\Request;
use App\Http\Controllers\Controller;
class ApiBaseController extends Controller
{
//认证的key
private static $key='mytoken';
//过期时间秒为单位
public static $Cache = '7200';
public function __construct( Request $request )
{
if( $request->path() != 'api/get-token')
{
$token = trim($request->input('token'));
if( config('token.token') != $token )
{
$obj = new \stdClass();
$obj->state = 0;
$obj->data = '';
$obj->msg = 'token不正确';
echo json_encode($obj);
exit();
}
if( config('token.expiration')
{
$obj = new \stdClass();
$obj->state = 0;
$obj->data = '';
$obj->msg = 'token失效';
echo json_encode($obj);
exit();
}
}
}
/**
* @param Request $request
* 获取token
*/
public function getToken( Request $request )
{
$key = trim($request->input('key'));
if( $key == static::$key )
{
if( config('token.expiration') > time() )
{
$obj = array();
$obj->state = 1;
$obj->data = config('token.token');
$obj->msg = 'Token为'.config('token.token');
return json_encode($obj);;
}
$token = str_random(25);
$time = time()+static::$Cache;
$str = "<?php \n return [\n'token' => '".$token."', \n'expiration'=>'".$time."' \n];";
file_put_contents(config_path().'/token.php',$str);
$obj = new \stdClass();
$obj->state = 1;
$obj->data = $token;
$obj->msg = '生成的Token为'.$token;
return json_encode($obj);
}else
{
$obj = new \stdClass();
$obj->state = 0;
$obj->data = '';
$obj->msg = 'key不正确';
return json_encode($obj);
}
}
public function index( Request $request )
{
dd( date("Y-m-d H:i:s",config('token.expiration')) );
}
}
4.请求:
生成token http://127.0.0.1/api/get-token?key=你的key值
你也可以使用laraver的laravel/passport配置如下: