MCPcopy Index your code
hub / github.com/TruthHun/BookStack / LoginByWechat

Method LoginByWechat

controllers/api/CommonController.go:150–183  ·  view source on GitHub ↗

微信登录

()

Source from the content-addressed store, hash-verified

148
149// 微信登录
150func (this *CommonController) LoginByWechat() {
151 form := &WechatForm{}
152 err := this.ParseForm(form)
153 if err != nil {
154 this.Response(http.StatusBadRequest, err.Error())
155 }
156 appId, secret := beego.AppConfig.String("appId"), beego.AppConfig.String("appSecret")
157 if form.Code == "" || form.UserInfo == "" {
158 this.Response(http.StatusBadRequest, messageBadRequest)
159 }
160 sess, err := oauth.GetWechatSessKey(appId, secret, form.Code)
161 if err != nil {
162 this.Response(http.StatusBadRequest, err.Error())
163 }
164 if sess.ErrMsg != "" {
165 this.Response(http.StatusBadRequest, sess.ErrMsg)
166 }
167 m := models.NewWechat()
168 user, err := m.GetUserByOpenid(sess.OpenId)
169 if user.MemberId > 0 { // 之前已经绑定过注册账号,直接登录成功
170 member, _ := models.NewMember().Find(user.MemberId)
171 this.login(*member)
172 }
173
174 wechatUser := &oauth.WechatUser{}
175 if err = json.Unmarshal([]byte(form.UserInfo), wechatUser); err != nil {
176 this.Response(http.StatusBadRequest, err.Error())
177 }
178 m = &models.Wechat{Openid: sess.OpenId, AvatarURL: wechatUser.AvatarURL, Nickname: wechatUser.NickName, SessKey: sess.SessionKey, Unionid: sess.UnionId}
179 if err = m.Insert(); err != nil {
180 this.Response(http.StatusBadRequest, err.Error())
181 }
182 this.Response(http.StatusUnauthorized, "未绑定账号,请先绑定账号", map[string]string{"sess": sess.SessionKey})
183}
184
185// 【OK】
186func (this *CommonController) login(member models.Member) {

Callers

nothing calls this directly

Calls 8

GetUserByOpenidMethod · 0.95
loginMethod · 0.95
InsertMethod · 0.95
GetWechatSessKeyFunction · 0.92
NewWechatFunction · 0.92
NewMemberFunction · 0.92
ResponseMethod · 0.80
FindMethod · 0.45

Tested by

no test coverage detected