小程序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, 
  • 2
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 3
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值