Go
iris二开onlyoffice
iris生成token并处理回调
上一篇跟大家分享了docker如何部署onlyoffice并开启jwt,今天跟大家分享iris如何生成前端需要的token以及处理onlyoffice回调。
一、生成token
我们先新建一个生成token的方法,可以外部调用,包名命名为onlyoffice,代码如下
package onlyoffice import ( "errors" "encoding/json" jwt "github.com/golang-jwt/jwt/v4" "aiblog/config" ) /** onlyoffice */ // 生成token func OnlyofficeCreateToken(payload string) (string, error) { // 获取配置 secret := config.Instance.Onlyoffice.JwtSecret // 将原始字符串作为MapClaims负载 var claims jwt.MapClaims if err := json.Unmarshal([]byte(payload), &claims); err != nil { return "", errors.New("could not parse JSON payload") } // 创建JWT签名方法 token := jwt.NewWithClaims(jwt.SigningMethodHS256, claims) // 使用密钥签署JWT ss, err := token.SignedString([]byte(secret)) if err != nil { return "", errors.New("could not generate a new jwt") } // 返回 return ss, nil }
然后我们直接在控制器写一个方法,将用户传过来的config生成token,代码如下
type OnlyofficeController struct { Ctx iris.Context } type tokenResponse struct { Token string `json:"token"` } /** 生成token */ func (c *OnlyofficeController) PostCreateToken() *web.JsonResult { // 获取配置 config := params.FormValue(c.Ctx, "config") if config == "" { return web.JsonErrorMsg("请输入配置") } // 获取token token, err := onlyoffice.OnlyofficeCreateToken(config) if err != nil { return web.JsonErrorMsg("创建失败") } //返回 return web.JsonData(&tokenResponse{token}) }
我们将前端传过来的config生成token之后,再通过token返回给前端,这里的config内容就是前端请求onlyoffice的配置参数。
二、处理回调
我们回调需要返回{"error": 0},不然在onlyoffice编辑的时候会提示这个报错
The document could not be saved. Please check connection settings or contact your administrator.
下面直接贴出代码
/** 回调函数 */ func (c *OnlyofficeController) PostCallBack() { //打印接受内容 body, err := io.ReadAll(c.Ctx.Request().Body) if err != nil { logrus.Error("Onlyoffice通知参数错误:", err) c.Ctx.JSON(iris.Map{"error": 1, "message": "获取参数失败"}) return } //记录数据 logrus.Info("Onlyoffice通知参数:", string(body)) //初始化结构体 var onlyOfficeResult onlyoffice.OnlyOffice // 解析 JSON 数据到结构体 err = json.Unmarshal(body, &onlyOfficeResult) if err != nil { c.Ctx.JSON(iris.Map{"error": 1, "message": "转化结构失败"}) return } // 判断是否是编辑完成的 if onlyOfficeResult.Status != 2 { c.Ctx.JSON(iris.Map{"error": 0, "message": "未编辑完成,不处理"}) return } // 判断是否存在标识 if onlyOfficeResult.Key == "" { c.Ctx.JSON(iris.Map{"error": 1, "message": "标识不存在,不处理"}) return } // 判断是否存在链接 if onlyOfficeResult.URL == "" { c.Ctx.JSON(iris.Map{"error": 1, "message": "链接不存在,不处理"}) return } //保存修改后文件 //这里填写自己处理的逻辑 //返回 c.Ctx.JSON(iris.Map{"error": 0}) }
上面我只是贴出接收跟返回的代码,中间的处理逻辑代码我是没放出来,大家根据自己的实际需求进行开发。
0条评论