前后端分离的项目,如何解决登录问题

原创
2017/04/10 09:12
阅读数 4.4W

方案一:使用token

  1. 前端把accountpassword,提交到服务端的登录api
  2. 服务端验证正确后,生成一个token,并把tokenuserId,存在缓存里(推荐redis数据库),然后把token返回给前端。
  3. 前端每次的请求头中带token,这样就能够轻松的实现

方案二:使用cookie

  1. client发送username和password到server

  2. server验证成功后, 写cookie到client,然后返回ok的json, 其中cookie的key要存储在redis中,value就是用户信息, 并且要设置key的超时时间,如:60分钟

  3. client收到ok后, 进行相应的业务操作, 以后每次请求server都会自动带上cookie, 不用你写代码

  4. server端的filter(你肯定用filter来实现)中会每次验证传过来的cookie的key在redis中是否存在, 有就代表登录成功过可以操作, 没有就返回错误标识注意: 在登录成功后, 每次调用服务器接口时候, 都要为redis的key进行续期,如60分钟

  5. 当redis的key超过60分钟, 自己会删除这个key, 那么再次请求server时, 就会收到需要登录的返回值

  6. 当用户主动退出系统的时候, 也要在server中删除redis的key

 

展开阅读全文
打赏
3
107 收藏
分享
加载中
hi 请教个场景, 前后端分离 如果支持第三方登录(微信 微博 qq等)的话,使用jwt 是不是前端那边需要开放一个用户登录后接收token ref_token的回调? 这样如果第三方网站恶意跳转呢
2018/01/07 13:25
回复
举报

引用来自“jdk2010”的评论

如何防止token篡改,例如,用户A,使用用户B的token,那操作算谁的

引用来自“OSC_hZGxcN”的评论

没想到直接解决的办法,但是token加有效期可以解决吗?
设定一个算法,生成的 token 暗含 account 信息,同时可以从 token 中解析出 account 信息。破解了这个算法才可以实现用户伪造。
2017/07/30 22:13
回复
举报
为什么不用oath2
2017/05/20 17:23
回复
举报
难道不是一二结合吗?拿到token,保存完缓存,并把给客户端返回的token设置想到cookie里不行?
2017/04/23 08:04
回复
举报
我是每个用户随机生成一段32位字符串,cookie保存,如果不自动登录就session
2017/04/16 07:02
回复
举报

引用来自“dingdayu”的评论

引用来自“月之舞步”的评论

引用来自“程序兵”的评论

需要这么麻烦吗,登陆完成后直接把用户id用session存起来,每次请求都判断session是否过期,过期了就提醒前端重新登录。

引用来自“shijacky”的评论

你做的系统分分钟被黑
你把黑的过程分享下。如果session被黑了,那么token又能安全到哪里去。。

session是后端,这里是需要前端告诉后端取谁的session。。。。你是搞前端的吧?
你到底懂我说的是什么吗?前后端分离用token不用session难道是因为安全问题???????我只不过顺着那人黑session的牛逼样子说了下去。让他说出黑的过程。
2017/04/12 15:11
回复
举报
你说的前后端分离是哪种? 前端页面和后台 单独部署 还是 前后端交互只使用ajax的这种?
2017/04/11 23:13
回复
举报

引用来自“程序兵”的评论

需要这么麻烦吗,登陆完成后直接把用户id用session存起来,每次请求都判断session是否过期,过期了就提醒前端重新登录。
刚那回复,理解错了! 自己的评论不允许删除,我擦
2017/04/11 20:09
回复
举报

引用来自“程序兵”的评论

需要这么麻烦吗,登陆完成后直接把用户id用session存起来,每次请求都判断session是否过期,过期了就提醒前端重新登录。
前后端分离的,你保存到session有什么用?
2017/04/11 20:07
回复
举报
上次做了个简单的前后端分离的项目,直接是差不多用的你第一种方式,用户登录保存用户id和token到redis,然后设置有效时间为30分钟,每次访问一个接口都会重置有效时间,但是提到的用户a拿用户b的token这个直接忽略了,毕竟小项目!
2017/04/11 20:06
回复
举报
更多评论
打赏
28 评论
107 收藏
3
分享
返回顶部
顶部