Skip to content
This repository has been archived by the owner on Feb 8, 2023. It is now read-only.

non-existent key #1

Open
itcuihao opened this issue Oct 31, 2017 · 0 comments
Open

non-existent key #1

itcuihao opened this issue Oct 31, 2017 · 0 comments

Comments

@itcuihao
Copy link


// Session struct
type Session struct {
	*sessions.Meta `json:"-"`
	UserCode       string `json:"UserCode"`
	UserName       string `json:"UserName"`
	Phone          string `json:"Phone"`
	Authed         int64  `json:"Authed"`
}

// Save is helpful method
func (s *Session) Save() error {
	return s.GetStore().Save(s)
}

var gearSession = session.New("Sess", sessions.New(), func() sessions.Sessions {
	return &Session{Meta: &sessions.Meta{}}
})

// FromCtx is helpful function to read session from gear.Context
func FromCtx(ctx *gear.Context) (*Session, error) {
	logger.Infof("sg:", gearSession)
	val, err := ctx.Any(gearSession)//此处报错 non-existent key
	logger.Infof("val:", val)
	logger.Infof("valerr:", err)
	return val.(*Session), err
}

type reqLogin struct {
	Name string `json:"LoginName"`
	Pass string `json:"Password"`
}

func (r *reqLogin) Validate() error {

	if len(r.Name) == 0 || len(r.Pass) == 0 {
		return gear.ErrBadRequest.WithMsg("用户名为空")
	}

	return nil
}

// Login /login
func (l *Login) Login(ctx *gear.Context) (err error) {
	body := new(reqLogin)
	if err = ctx.ParseBody(body); err != nil {
		return
	}

	var u *schema.User
	if u, err = l.loginBll.Login(body.Name, body.Name, body.Pass); err != nil {
		return gear.ErrInternalServerError.WithMsg("请输入正确的账号密码")
	} else if u == nil {
		return gear.ErrInternalServerError.WithMsg("请输入正确的账号密码")
	} else if u.UserCode == "" {
		return gear.ErrInternalServerError.WithMsg("请输入正确的账号密码")
	}

	sess, err := FromCtx(ctx)
	if err != nil {
		logger.Errorf("session err:%s", err.Error())
		fmt.Println(sess.IsNew()) // true
		sess.UserCode = u.UserCode
		sess.UserName = u.UserName
		sess.Phone = u.Phone
		sess.Authed = time.Now().Unix()
		sess.Save()
	} else {
		fmt.Println(sess.IsNew()) // true
		fmt.Println(sess)
		logger.Infof("session:", sess)
		// update session
		sess.Authed = time.Now().Unix()
		sess.Save()
	}

	return ctx.JSON(http.StatusOK, sess)
}

用gear-session时遇到个问题,望解答,谢谢。

Sign up for free to subscribe to this conversation on GitHub. Already have an account? Sign in.
Labels
None yet
Projects
None yet
Development

No branches or pull requests

1 participant