|
@@ -5,6 +5,7 @@ import (
|
|
|
"encoding/json"
|
|
|
"fmt"
|
|
|
"jfw/config"
|
|
|
+ "jfw/jyutil"
|
|
|
"log"
|
|
|
"net/http"
|
|
|
qutil "qfw/util"
|
|
@@ -46,12 +47,12 @@ type UserSign struct {
|
|
|
//注册登录 手机号登录 微信注册并登录 微信登录 签名登录
|
|
|
type Login struct {
|
|
|
*xweb.Action
|
|
|
- login xweb.Mapper `xweb:"/jyapp/free/login"` //登录
|
|
|
- register xweb.Mapper `xweb:"/jyapp/free/register"` //注册
|
|
|
- wxRegister xweb.Mapper `xweb:"/jyapp/free/wxRegister"` //
|
|
|
- signOut xweb.Mapper `xweb:"/jyapp/free/signOut"` //退出
|
|
|
- forgetPwd xweb.Mapper `xweb:"/jyapp/forgetPwd"` //忘记密码
|
|
|
- sess xweb.Mapper `xweb:"/jyapp/free/sess/(.*)"` //微信跳转session登录
|
|
|
+ login xweb.Mapper `xweb:"/jyapp/free/login"` //登录
|
|
|
+ register xweb.Mapper `xweb:"/jyapp/free/register"` //注册
|
|
|
+ wxLogin xweb.Mapper `xweb:"/jyapp/free/wxLogin"` //
|
|
|
+ signOut xweb.Mapper `xweb:"/jyapp/free/signOut"` //退出
|
|
|
+ forgetPwd xweb.Mapper `xweb:"/jyapp/free/forgetPwd"` //忘记密码
|
|
|
+ sess xweb.Mapper `xweb:"/jyapp/free/sess/(.*)"` //微信跳转session登录
|
|
|
}
|
|
|
|
|
|
var (
|
|
@@ -67,13 +68,27 @@ func init() {
|
|
|
func (l *Login) Login() error {
|
|
|
defer qutil.Catch()
|
|
|
if l.Method() == "GET" {
|
|
|
- return l.Render("/me/login.html")
|
|
|
+ sign := l.GetString("sign")
|
|
|
+ //普通登录,跳转到登录页面
|
|
|
+ if sign == "" {
|
|
|
+ return l.Render("/me/login.html")
|
|
|
+ } else { //带有签名的登录
|
|
|
+ url := l.GetString("url")
|
|
|
+ if url == "" {
|
|
|
+ log.Println("自动登录需要跳转的url为空!")
|
|
|
+ } else {
|
|
|
+ status := autoLogin(sign, l.Session(), nil)
|
|
|
+ if status == 1 {
|
|
|
+ return l.Redirect(url)
|
|
|
+ }
|
|
|
+ }
|
|
|
+ return l.Redirect("/jyapp/free/me")
|
|
|
+ }
|
|
|
}
|
|
|
returnSign := ""
|
|
|
userInfo := map[string]interface{}{}
|
|
|
status := func() int {
|
|
|
reqType := l.GetString("reqType")
|
|
|
- rid := l.GetString("rid")
|
|
|
if reqType == "phoneLogin" {
|
|
|
phone := l.GetString("phone")
|
|
|
password := l.GetString("password")
|
|
@@ -89,43 +104,12 @@ func (l *Login) Login() error {
|
|
|
user, ok := mongodb.FindOne("user", query)
|
|
|
//登录成功
|
|
|
if ok && user != nil && len(*user) > 0 {
|
|
|
- returnSign = afterLogin(*user, query, l.Session(), phone, rid, 1)
|
|
|
+ returnSign = afterLogin(*user, query, l.Session(), phone, l.GetString("rid"), 1)
|
|
|
return 1
|
|
|
}
|
|
|
return -1 //用户名或密码不正确
|
|
|
} else if reqType == "signLogin" {
|
|
|
- if l.GetSession("s_m_openid") != nil {
|
|
|
- return 1
|
|
|
- }
|
|
|
- param := l.GetString("param")
|
|
|
- if param == "" {
|
|
|
- return 0
|
|
|
- }
|
|
|
- param = se.DecodeString(param)
|
|
|
- log.Println("登录签名:", param)
|
|
|
- u := &UserSign{}
|
|
|
- err := json.Unmarshal([]byte(param), &u)
|
|
|
- if err != nil {
|
|
|
- log.Println(err)
|
|
|
- return -1
|
|
|
- }
|
|
|
- if u.Sign != getSign(u) {
|
|
|
- log.Println("登录签名不对!")
|
|
|
- return -2 //签名不对
|
|
|
- }
|
|
|
- query := map[string]interface{}{
|
|
|
- "s_m_openid": u.OpenId,
|
|
|
- "i_appid": 2,
|
|
|
- "i_type": u.Type,
|
|
|
- }
|
|
|
- user, ok := mongodb.FindOne("user", query)
|
|
|
- if ok && user != nil && len(*user) > 0 {
|
|
|
- afterLogin(*user, query, l.Session(), "", rid, -1)
|
|
|
- userInfo["headimageurl"] = (*user)["s_headimageurl"]
|
|
|
- userInfo["nickname"] = l.GetSession("s_nickname")
|
|
|
- return 1
|
|
|
- }
|
|
|
- return 0
|
|
|
+ return autoLogin(l.GetString("sign"), l.Session(), &userInfo)
|
|
|
}
|
|
|
return 0
|
|
|
}()
|
|
@@ -192,7 +176,6 @@ func (l *Login) Register() error {
|
|
|
defer qutil.Catch()
|
|
|
if l.Method() == "GET" {
|
|
|
if l.GetString("step") == "2" {
|
|
|
- log.Println(l.GetSession("registerStep") == "2")
|
|
|
if l.GetSession("registerStep") == "2" {
|
|
|
return l.Render("/me/setpwd.html")
|
|
|
}
|
|
@@ -241,6 +224,7 @@ func (l *Login) Register() error {
|
|
|
data := map[string]interface{}{
|
|
|
"i_type": 1, //手机注册
|
|
|
"i_appid": 2,
|
|
|
+ "i_ispush": 1,
|
|
|
"s_m_openid": phone,
|
|
|
"s_unionid": phone,
|
|
|
"s_phone": phone,
|
|
@@ -253,7 +237,7 @@ func (l *Login) Register() error {
|
|
|
"i_ratemode": 1,
|
|
|
"l_modifydate": time.Now().Unix(),
|
|
|
},
|
|
|
- "o_log": getPhoneInfo(l.Request),
|
|
|
+ "o_log": reqPhoneInfo(l.Request),
|
|
|
}
|
|
|
_id := mongodb.Save("user", data)
|
|
|
if _id != "" {
|
|
@@ -279,17 +263,16 @@ func (l *Login) Register() error {
|
|
|
}
|
|
|
|
|
|
//微信注册保存并登陆
|
|
|
-func (l *Login) WxRegister() {
|
|
|
+func (l *Login) WxLogin() {
|
|
|
defer qutil.Catch()
|
|
|
returnSign := ""
|
|
|
status := func() int {
|
|
|
- log.Println(l.GetString("param"))
|
|
|
b, err := base64.StdEncoding.DecodeString(l.GetString("param"))
|
|
|
if err != nil {
|
|
|
log.Println(err)
|
|
|
return -1
|
|
|
}
|
|
|
- log.Println("微信注册:", string(b))
|
|
|
+ log.Println("微信登录:", string(b))
|
|
|
u := &WxUserInfo{}
|
|
|
err = json.Unmarshal(b, &u)
|
|
|
if err != nil {
|
|
@@ -302,7 +285,20 @@ func (l *Login) WxRegister() {
|
|
|
log.Println("微信注册签名错误!")
|
|
|
return -2
|
|
|
}
|
|
|
- query := bson.M{"s_m_openid": u.OpenId, "i_appid": 2}
|
|
|
+ query := bson.M{"s_unionid": u.UnionId, "i_appid": 2}
|
|
|
+ user, ok := mongodb.FindOne("user", query)
|
|
|
+ if !ok {
|
|
|
+ return 0
|
|
|
+ }
|
|
|
+ rid := l.GetString("rid")
|
|
|
+ if user != nil && len(*user) > 0 {
|
|
|
+ //登录
|
|
|
+ returnSign = afterLogin(*user, query, l.Session(), u.OpenId, rid, qutil.IntAll((*user)["i_type"]))
|
|
|
+ return 1
|
|
|
+ } else {
|
|
|
+ return -3
|
|
|
+ }
|
|
|
+ /*query := bson.M{"s_m_openid": u.OpenId, "i_appid": 2}
|
|
|
user, ok := mongodb.FindOne("user", query)
|
|
|
if !ok {
|
|
|
return 0
|
|
@@ -322,6 +318,7 @@ func (l *Login) WxRegister() {
|
|
|
newUser["i_appid"] = 2
|
|
|
newUser["i_type"] = 2 //微信注册
|
|
|
newUser["i_ts_guide"] = 2
|
|
|
+ newUser["i_ispush"] = 1
|
|
|
newUser["s_m_openid"] = u.OpenId
|
|
|
newUser["s_unionid"] = u.UnionId
|
|
|
newUser["l_registedate"] = time.Now().Unix()
|
|
@@ -336,12 +333,12 @@ func (l *Login) WxRegister() {
|
|
|
"i_ratemode": 1,
|
|
|
"l_modifydate": time.Now().Unix(),
|
|
|
}
|
|
|
- newUser["o_log"] = getPhoneInfo(l.Request)
|
|
|
+ newUser["o_log"] = reqPhoneInfo(l.Request)
|
|
|
if mongodb.Save("user", newUser) != "" {
|
|
|
returnSign = afterLogin(newUser, nil, l.Session(), u.OpenId, rid, 2)
|
|
|
return 1
|
|
|
}
|
|
|
- }
|
|
|
+ }*/
|
|
|
return 0
|
|
|
}()
|
|
|
//返回
|
|
@@ -426,7 +423,7 @@ func SendIdentCode(title, phone string, session *httpsession.Session) bool {
|
|
|
lastSentTime, _ := session.Get("identCodeTime").(int64)
|
|
|
//60秒之内不允许重复发
|
|
|
if lastSentTime > 0 && time.Now().Unix()-lastSentTime <= 60 {
|
|
|
- //return false
|
|
|
+ return false
|
|
|
}
|
|
|
s_ranNum := qutil.GetRandom(6) //生成随机数
|
|
|
session.Set("identCodeValue", s_ranNum)
|
|
@@ -435,9 +432,8 @@ func SendIdentCode(title, phone string, session *httpsession.Session) bool {
|
|
|
//发送短信
|
|
|
param := make(map[string]string)
|
|
|
param["code"] = s_ranNum
|
|
|
- param["company"] = "剑鱼"
|
|
|
log.Println("验证码", phone, s_ranNum)
|
|
|
- //jyutil.SendSMS("1", phone, param)
|
|
|
+ jyutil.SendSMS("2175916", phone, param)
|
|
|
return true
|
|
|
}
|
|
|
|
|
@@ -543,16 +539,16 @@ func afterLogin(user, query map[string]interface{}, session *httpsession.Session
|
|
|
"s_jpushid": rid,
|
|
|
},
|
|
|
}, false, false)
|
|
|
- mongodb.Update("follow_project", map[string]interface{}{"s_openid": openid}, map[string]interface{}{
|
|
|
+ mongodb.Update("follow_project", map[string]interface{}{"s_openid": qutil.ObjToString(query["s_m_openid"])}, map[string]interface{}{
|
|
|
"$set": map[string]interface{}{
|
|
|
"s_jpushid": rid,
|
|
|
},
|
|
|
- }, false, false)
|
|
|
- mongodb.Update("jylab_followent", map[string]interface{}{"s_openid": openid}, map[string]interface{}{
|
|
|
+ }, false, true)
|
|
|
+ mongodb.Update("jylab_followent", map[string]interface{}{"s_openid": qutil.ObjToString(query["s_m_openid"])}, map[string]interface{}{
|
|
|
"$set": map[string]interface{}{
|
|
|
"s_jpushid": rid,
|
|
|
},
|
|
|
- }, false, false)
|
|
|
+ }, false, true)
|
|
|
}()
|
|
|
}
|
|
|
if openid != "" {
|
|
@@ -584,7 +580,7 @@ func clearRidByRid(rid string) {
|
|
|
}
|
|
|
|
|
|
//获取保存用户日志
|
|
|
-func getPhoneInfo(req *http.Request) map[string]interface{} {
|
|
|
+func reqPhoneInfo(req *http.Request) map[string]interface{} {
|
|
|
return map[string]interface{}{
|
|
|
"s_ip": req.Proto,
|
|
|
"s_describe": req.Form,
|
|
@@ -592,3 +588,36 @@ func getPhoneInfo(req *http.Request) map[string]interface{} {
|
|
|
"s_method": req.Method,
|
|
|
}
|
|
|
}
|
|
|
+
|
|
|
+//解析签名
|
|
|
+func autoLogin(sign string, session *httpsession.Session, userInfo *map[string]interface{}) int {
|
|
|
+ if session.Get("s_m_openid") != nil {
|
|
|
+ return 1
|
|
|
+ }
|
|
|
+ sign = se.DecodeString(sign)
|
|
|
+ log.Println("登录签名:", sign)
|
|
|
+ u := &UserSign{}
|
|
|
+ err := json.Unmarshal([]byte(sign), &u)
|
|
|
+ if err != nil {
|
|
|
+ log.Println(err)
|
|
|
+ return -1
|
|
|
+ }
|
|
|
+ if u.Sign != getSign(u) {
|
|
|
+ log.Println("登录签名不对!")
|
|
|
+ return -2 //签名不对
|
|
|
+ }
|
|
|
+ query := map[string]interface{}{
|
|
|
+ "s_m_openid": u.OpenId,
|
|
|
+ "i_appid": 2,
|
|
|
+ }
|
|
|
+ user, ok := mongodb.FindOne("user", query)
|
|
|
+ if ok && user != nil && len(*user) > 0 {
|
|
|
+ afterLogin(*user, query, session, "", u.Rid, -1)
|
|
|
+ if userInfo != nil {
|
|
|
+ (*userInfo)["headimageurl"] = (*user)["s_headimageurl"]
|
|
|
+ (*userInfo)["nickname"] = session.Get("s_nickname")
|
|
|
+ }
|
|
|
+ return 1
|
|
|
+ }
|
|
|
+ return 0
|
|
|
+}
|