当前位置: 首页 > wzjs >正文

长春网站建设q479185700棒在线定制

长春网站建设q479185700棒,在线定制,wordpress插件使用,wordpress升级需要ftp钉钉的的官方开发文档中只给出了java实现三方登录的,我们准备用go语言来实现 实现网页方式登录应用(登录第三方网站) - 钉钉开放平台 首先就是按照文档进行操作,备注好网站的信息 获得应用凭证,我们后面会用到 之后…

钉钉的的官方开发文档中只给出了java实现三方登录的,我们准备用go语言来实现

实现网页方式登录应用(登录第三方网站) - 钉钉开放平台

首先就是按照文档进行操作,备注好网站的信息

获得应用凭证,我们后面会用到

之后配置回调域名,用于后续前端页面重定向使用

开通用户的个人信息权限

代码如下

控制层

// RedirectToDingTalkLogin
// @Description: 将用户重定向到钉钉登录授权页
// @param        c *gin.Context
func RedirectToDingTalkLogin(c *gin.Context) {appId := "**这里写你的Client ID**"redirectUri := url.QueryEscape("**这里写你的回调地址**") // 钉钉回调地址state := "random-state"                                             //防止CSRF,可选url := fmt.Sprintf("https://oapi.dingtalk.com/connect/qrconnect?appid=%s&response_type=code&scope=snsapi_login&state=%s&redirect_uri=%s",appId, state, redirectUri)c.Redirect(http.StatusFound, url)
}// GetDingTalkToken
// @Description: 处理钉钉回调信息
// @param        c *gin.Context
func GetDingTalkToken(c *gin.Context) {authCode := c.DefaultQuery("authCode", "")if authCode == "" {response.Failed(c, http.StatusBadRequest, response.NewAppErr(globals.StatusBadRequest, nil, nil))return}accessToken, err := logics.GetAccessToken(authCode)if err != nil {response.Failed(c, http.StatusInternalServerError, response.NewAppErr(globals.StatusInternalServerError, err, nil))return}//获取用户信息userInfo, err := logics.GetDingTalkUserInfo(accessToken)if err != nil {response.Failed(c, http.StatusInternalServerError, response.NewAppErr(globals.StatusInternalServerError, err, nil))return}logics.ThirdPartLogin(c, userInfo, "dingTalk")
}

业务层代码

var dingTalkConf = requests.Conf{ClientId:     "你的client ID",ClientSecret: "你的ClientSecret",RedirectUrl:  "你的回调地址",
}// GetAccessToken
// @Description: 获取钉钉通行token
// @param        authCode string
// @return       string
// @return       error
func GetAccessToken(authCode string) (string, error) {api := "https://api.dingtalk.com/v1.0/oauth2/userAccessToken"payload := url.Values{}payload.Set("clientId", dingTalkConf.ClientId)payload.Set("clientSecret", dingTalkConf.ClientSecret)payload.Set("code", authCode)payload.Set("grantType", "authorization_code")resp, err := http.PostForm(api, payload)if err != nil {return "", fmt.Errorf("post token error: %v", err)}defer resp.Body.Close()body, _ := ioutil.ReadAll(resp.Body)if resp.StatusCode != http.StatusOK {return "", fmt.Errorf("failed to get token: %s", string(body))}var tokenResp requests.TokenResponseif err = json.Unmarshal(body, &tokenResp); err != nil {return "", fmt.Errorf("parse token json error: %v", err)}return tokenResp.AccessToken, nil
}// GetDingTalkUserInfo
// @Description: 通过token获取用户信息
// @param        accessToken string
// @return       *models.User
// @return       error
func GetDingTalkUserInfo(accessToken string) (map[string]interface{}, error) {api := "https://api.dingtalk.com/v1.0/contact/users/me"req, _ := http.NewRequest("GET", api, nil)req.Header.Set("x-acs-dingtalk-access-token", accessToken)client := &http.Client{}resp, err := client.Do(req)if err != nil {return nil, fmt.Errorf("get user info error: %v", err)}defer resp.Body.Close()body, _ := ioutil.ReadAll(resp.Body)if resp.StatusCode != http.StatusOK {return nil, fmt.Errorf("failed to get user info: %s", string(body))}var userInfo map[string]interface{}if err = json.Unmarshal(body, &userInfo); err != nil {return nil, fmt.Errorf("parse user json error: %v", err)}return userInfo, nil
}// ThirdPartLogin
// @Description: 根据第三方信息登录并生成token
// @param        c *gin.Context
// @param        userInfo map[string]interface{}
// @param        provider string
func ThirdPartLogin(c *gin.Context, userInfo map[string]interface{}, provider string) {db := globals.DB//判断用户是否扫码登录过userId, err := repositories.CheckHistoryLogin(db, userInfo["id"].(string), provider)if err != nil {response.Failed(c, http.StatusInternalServerError, response.NewAppErr(globals.StatusInternalServerError, err, nil))}if userId == 0 {//判断用户是否注册过user := repositories.QueryUserByEmail(db, userInfo["email"].(string))if user == nil {//没注册过直接跳转至注册return}//将三方登录记录插入记录表err = repositories.InsertOtherLogin(db, userInfo["id"].(string), provider, user.ID)if err != nil {response.Failed(c, http.StatusInternalServerError, response.NewAppErr(globals.StatusInternalServerError, err, nil))return}}// 生成tokenid := userIdtok, err := token.GenerateToken(id, userInfo["email"].(string))if err != nil {globals.Log.Errorf(err.Error())response.Failed(c, http.StatusInternalServerError, response.NewAppErr(globals.StatusInternalServerError, err, nil))return}response.Success(c, http.StatusOK, response.NewAppData(globals.StatusOK, response.DataSuccess, gin.H{"Token": tok, "userinfo": userInfo}))
}


文章转载自:

http://NxZJQ5Hh.qfkxj.cn
http://fRRYxYCm.qfkxj.cn
http://rAs6a5Ml.qfkxj.cn
http://IJAkTKsy.qfkxj.cn
http://RTIQSBwk.qfkxj.cn
http://QgIxDd1g.qfkxj.cn
http://PkRjXTWH.qfkxj.cn
http://DlJNrw3y.qfkxj.cn
http://yPtQMJn6.qfkxj.cn
http://63jsno7d.qfkxj.cn
http://JMyAAqF4.qfkxj.cn
http://Vab7jipK.qfkxj.cn
http://uOduZPhQ.qfkxj.cn
http://l3a5fTnk.qfkxj.cn
http://m15GwGyG.qfkxj.cn
http://HIHIbpqb.qfkxj.cn
http://xoysWCof.qfkxj.cn
http://Dqm9Nuo6.qfkxj.cn
http://DrGKa1pF.qfkxj.cn
http://G3s1KJOD.qfkxj.cn
http://v4Qbmm2L.qfkxj.cn
http://Llw9Tr63.qfkxj.cn
http://A9WtF0Qe.qfkxj.cn
http://krq68mtD.qfkxj.cn
http://8wlrJitV.qfkxj.cn
http://rq8mGluX.qfkxj.cn
http://pno1BoTB.qfkxj.cn
http://HH1vVPGX.qfkxj.cn
http://PSGMoYyC.qfkxj.cn
http://FHku0RUa.qfkxj.cn
http://www.dtcms.com/wzjs/658598.html

相关文章:

  • 微网站设计与制作seo优化顾问服务
  • 青岛网站建设大全杭州市在建工程项目
  • 个人可以做购物网站吗深圳高端商场排名
  • 网站建设素材收集通知怎么制作网页设计
  • 网站没权重东莞网红打卡地
  • 网站排名优化工具安徽一方建设招标网站
  • 关于网站开发人员保密协议wordpress主题音乐
  • 网络推广网站排行榜平顶山住房和城乡建设局网站
  • 网站推广怎么做云搜索app下载
  • 抚州建设工程网站食品行业网站开发
  • 网站为什么要icp备案手机网站与电脑网站兼容
  • 网站开发自适应不同分辨率小程序开发教程个人
  • 百度收录网站怎么做江象网站建设
  • 建设网站功能定位sem优化托管公司
  • 购物网站建设代理商主机屋 建网站教程
  • 亚马逊网站类型天津制作网站首页
  • 网站数据库连接错误网站和app的关系
  • 门户网站的门户思维有什么特点工业设计公司排行
  • 陵水网站建设公司昆明网络推广哪里有
  • 医疗网站建设意见wordpress 图文直播插件
  • 商务网站规划与建设做微信视频的网站
  • wampserver做网站wordpress下载站会员系统
  • 建设网站书籍pdf建网站图片怎么找
  • 龙港网秦皇岛网站seo
  • 网站开发z亿玛酷1专注wordpress主题使用加
  • 网站备案授权旅游网站源码 wordpress模板 v1.0
  • 什么网站做全景效果图好网站设计的一般流程
  • 用discuz做行业网站广州从化建设网站官网
  • 响应式网站开发流行吗百度图片搜索网页版
  • 江苏建设执业资格注册中心官方网站网站地址解析