关于系统登录的相关问题请教

来源:5-10 登陆管理功能 - 登陆信息接口开发

甲壳虫之子911

2020-08-05

这是我最近购买的教程最好之一,感谢。
一路过来,前端后端用户登录,修改密码等模块无坑设置成功。
其中几个关于登录的问题想咨询下,不胜感激。

1、虽成功登录跳转,相关配置已更改,而且后端显示有接口访问记录是正确的“127.0.0.1 | POST /admin_login/login”肯定是打到正确后端地址了
但是谷歌浏览器开发工具中,netword中的header,Request URL还是显示http://localhost:9527/dev-api/admin_login/login。
相关配置如下:
proxy: {
// change xxx-api/login => mock/login
// detail: https://cli.vuejs.org/config/#devserver-proxy
[process.env.VUE_APP_BASE_API]: {
target: http://127.0.0.1:8880,
changeOrigin: true,
pathRewrite: {
[’^’ + process.env.VUE_APP_BASE_API]: ‘’
}
}
},

2、func (adminlogin *AdminLoginController) AdminLogin(c *gin.Context) {函数中,如果我将最后
output := &dto.AdminLoginOutPut{Token: admin.UserName}
其中的Token的内容刻意设置错误,登录跳转失败。
包括DTO中
type AdminInfoOutput struct {
ID int json:"id"
Name string json:"name"
LoginTime time.Time json:"login_time"
Avatar string json:"avatar"
Introduction string json:"introduction"
Roles []string json:"roles"
}
如果roles不设置,或者名称显示别的,都会造成和vue-admin中“roles must be a non-null array!”的报错
// roles must be a non-empty array
if (!roles || roles.length <= 0) {
reject(‘getInfo: roles must be a non-null array!’)
}

带来一个问题,请教:
关于前端在登录过程中,具体的业务逻辑是如何的,首次访问先通过api接口api/usr.js访问后台接口,然后服务端和浏览器端如何保存token和sesson。不登出情况下, 再次登录可直接跳转大盘,业务逻辑是如何的?是如何做到不登录?session的有效时间如何设置?如何刷新?

写回答

1回答

牛儿吃草

2020-08-07

1、接口都打到了localhost:9527/dev-api是因为,前端为了做到同域。所以必须要通过vue-proxy功能做下转发才行。

2、具体用户登陆业务逻辑:

views/login/index.vue 的 handleLogin方法
store/modules/user.js 的 login({ commit }, userInfo)   
api/user.js的 login(data) 方法

如果上面接口执行成功后服务器执行  session信息存储与本地用户cookie关联。
语句如下:
controller/admin_login.go
sess := sessions.Default(c)
sess.Set(public.AdminSessionInfoKey, string(sessBts))
sess.Save()

如果上面接口执行成功后浏览器执行  cookie 及 vue 的store 存储 token值。

store/modules/user.js 
commit('SET_TOKEN', data.token)
setToken(data.token)

3、session有效期设置

router/route.go

store, err := sessions.NewRedisStore(10, "tcp", lib.GetStringConf("base.session.redis_server"), lib.GetStringConf("base.session.redis_password"), []byte("secret"))
if err != nil {
  log.Fatalf("sessions.NewRedisStore err:%v", err)
}

store.Options(sessions.Options{  //这句话是新增的,如果没有设置关闭浏览器后会话应该会失效的。
  Path:     "/",
  MaxAge:   86400,
  HttpOnly: true,
})

0
0

(打造简历金牌项目)Vue+Go 开发企业级微服务网关项目

简历中摒弃烂大街的培训机构项目,带你开发企业级微服务网关

1302 学习 · 340 问题

查看课程