小程序token
后台,安装laravel7配置passport
用passport实现接口的登录和jwt生成(生成token)
安装passport插件
composer require laravel/passport
或
composer require laravel/passport "^9.0"
执迁迁移文件,生成数据表,保存token数据
php artisan migrate
生成客户端授权码
php artisan passport:install
Encryption keys generated successfully.
Personal access client created successfully.
Client ID: 1
Client secret: 6AS6JW79GMdhTUAJhjMN6nVFy8HMvtIGXFNqJiGX
Password grant client created successfully.
Client ID: 2
Client secret: KpZOwXE321ytcNuIYuWoJoVeEOhvcL3odLLIVbFJ
修改接口账号模型
use Laravel\Passport\HasApiTokens;
修改config/auth.php文件中的api配置
令牌的有效期
在app/Proivders/AuthServiceProvide.php文件中的boot方法添加有效期
use Laravel\Passport\Passport;
// token认证有效期2小时
Passport::tokensExpireIn(now()->addHour(2));
// 刷新token认证有效期30天
Passport::refreshTokensExpireIn(now()->addDays(30));
实现登录,并且注意,如果登录不成功,数据返回符合restful规范
** return response()->json([‘errorCode’ => 0, ‘data’ => [‘token’ => $token, ‘expire’ => 7200,‘time’=>time()], ‘msg’ => ‘登录成功’],200);**
路由
<?php
use Illuminate\Http\Request;
use Illuminate\Support\Facades\Route;
Route::middleware('auth:api')->get('/user', function (Request $request) {
return $request->user();
});
//不需要校验的登录, 获取openid,
Route::group(['prefix'=>'v1','namespace'=>'Api'],function (){
//微信登录路由
Route::post('wx_login','LoginController@wxLogin');
});
//分组路由 middleware 中间件 prefix 版本号 namespace:命名空间前缀 'throttle:3,1' 一秒钟请求次数,接口访问频次限制
//Route::group(['middleware'=>['auth:api','throttle:3,1'],'prefix'=>'v1','namespace'=>'Api'],function (){
Route::group(['middleware'=>'auth:api','prefix'=>'v1','namespace'=>'Api'],function (){
// //更新用户信息
Route::put('users','LoginController@saveUsers');
//秒杀商品列表
Route::get('activity_list','GoodsController@activityList');
//商品详情
Route::get('goods_detail','GoodsController@goodsDetail');
//抢购接口
Route::post('snap_up','GoodsController@checkStock');
//创建订单
Route::post('goods_order','GoodsController@createOrder');
});
//更新用户信息
Route::get('stock','Api\GoodsController@syncStock');
微信登录获取openid
配置文件
<?php
return [
'AppID' => 'wxf9c53e0a497cc457',
'AppSecret' => '47646ed2a1f74e056ab42cd6777cd500',
'wxLoginUrl'=>'https://api.weixin.qq.com/sns/jscode2session?appid=%s&secret=%s&js_code=%s&grant_type=authorization_code'
];
login控制器
<?php
namespace App\Http\Controllers\Api;
use App\Http\Controllers\Controller;
use Illuminate\Http\Request;
//文件存储
use GuzzleHttp\Client;
//调用模型层
use App\Models\Renting;
//缓存系统
use Illuminate\Support\Facades\Cache;
class LoginController extends Controller
{
/**
* 注:secret保存起来
* Encryption keys generated successfully.
* Personal access client created successfully.
* Client ID: 1
* Client secret: annKa8WJdwmhDhz4Hj3lEv3IBbTJI4ebCkmsEwT6
* Password grant client created successfully.
* Client ID: 2
* Client secret: 32G1jFCUNM0iTMf3LBEp3VAe7J9W9Ao665G9uSdR
*/
//微信登录方法
public function wxLogin(Request $request)
{
//接收参数
$params = $request->all();
//微信小程序登录的url地址
$url = sprintf(config('wx.wxLoginUrl'), config('wx.AppID'), config('wx.AppSecret'), $params['code']);
$client = new Client(['timeout' => 5, 'verify' => false]);
$response = $client->get($url);
$data = (string)$response->getBody();
//转成数据
$data = json_decode($data, true);
//进行查询数据,如果没有进行添加,如果则进行生成token
$renting = Renting::where('openid', $data['openid'])
->first();
if (empty($renting)) {
//存sql数据库
//$renting = Renting::create($data);
$renting = Renting::create(['openid'=>$data['openid']]);
}
//生成token
$token = $renting->createToken('api')->accessToken;
//清缓存 Cache::flush();
//存缓存
Cache::set($token, $renting, 7200);
//取缓存 Cache::get($token); var_dump($data);die();
//返回
return response()->json(['errorCode' => 0, 'data' => ['token' => $token, 'expire' => 7200,'time'=>time()], 'msg' => '登录成功'],200);
}
//更新用户信息
public function saveUsers(Request $request)
{
//接收参数
$params = $request->all();
//获取token
$token = explode(' ',$request->header('authorization'))[1];
//进行查看
$userInfo = Cache::get($token);
//更新用户信息完成
$userInfo->update($params);
return response()->json(['errorCode' => 0,