前后端分离的项目,如何解决登录问题
前后端分离的项目,如何解决登录问题
楠木楠 发表于6个月前
前后端分离的项目,如何解决登录问题
  • 发表于 6个月前
  • 阅读 2826
  • 收藏 108
  • 点赞 3
  • 评论 27

腾讯云 十分钟定制你的第一个小程序>>>   

方案一:使用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

 

标签: 前后端分离
共有 人打赏支持
粉丝 92
博文 468
码字总数 534089
评论 (27)
程序兵
需要这么麻烦吗,登陆完成后直接把用户id用session存起来,每次请求都判断session是否过期,过期了就提醒前端重新登录。
丈量大地

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

需要这么麻烦吗,登陆完成后直接把用户id用session存起来,每次请求都判断session是否过期,过期了就提醒前端重新登录。
服务是有状态的话你这种方式还是相当简单,但对于那种前后端分离的系统,session被弱化,你这种处理方式就不可行了
咖啡碼農
前后端分享当然推荐第一种,并且token使用jwt。
shijacky

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

需要这么麻烦吗,登陆完成后直接把用户id用session存起来,每次请求都判断session是否过期,过期了就提醒前端重新登录。
你做的系统分分钟被黑
jdk2010
如何防止token篡改,例如,用户A,使用用户B的token,那操作算谁的
阿cat

引用来自“shijacky”的评论

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

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

咋黑?本来不是用session的吗?
zzuqiang

引用来自“jdk2010”的评论

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

@jdk2010 对,这个问题问的好!用户篡改,用户伪造
程序兵

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

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

引用来自“shijacky”的评论

你做的系统分分钟被黑
不至于吧,你把黑的操作过程分享一下。
obadneil

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

需要这么麻烦吗,登陆完成后直接把用户id用session存起来,每次请求都判断session是否过期,过期了就提醒前端重新登录。
restfull api的最佳实践是无状态化,因此设计时尽量保证无状态化。
月之舞步

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

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

引用来自“shijacky”的评论

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

引用来自“jdk2010”的评论

如何防止token篡改,例如,用户A,使用用户B的token,那操作算谁的
没想到直接解决的办法,但是token加有效期可以解决吗?
mlovewt
防止token篡改可以在token中记录部分客户端信息,做到同一客户端只有一个登陆账号
绫小路清隆
请问用session不行的吗?
龙上
前后端分离也是可以使用cookie session的
dingdayu

引用来自“OSC_hZGxcN”的评论

引用来自“jdk2010”的评论

如何防止token篡改,例如,用户A,使用用户B的token,那操作算谁的
没想到直接解决的办法,但是token加有效期可以解决吗?

肯定是B啊,token,是应尽量不被泄露的,相当于临时的账号和密码,比较你不能要求用户每次访问都输入用户名和密码,何况那也一样会被泄露。
dingdayu

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

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

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

引用来自“shijacky”的评论

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

session是后端,这里是需要前端告诉后端取谁的session。。。。你是搞前端的吧?
Joyzhou
所以现在大部分sso的实现会把token再加密生成一个加密token
jdk2010
@OSC_hZGxcN 例如微信的auth,token有效期 默认2个小时,但是这2个小时内,如何确保安全
石头捡到布
上次做了个简单的前后端分离的项目,直接是差不多用的你第一种方式,用户登录保存用户id和token到redis,然后设置有效时间为30分钟,每次访问一个接口都会重置有效时间,但是提到的用户a拿用户b的token这个直接忽略了,毕竟小项目!
石头捡到布

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

需要这么麻烦吗,登陆完成后直接把用户id用session存起来,每次请求都判断session是否过期,过期了就提醒前端重新登录。
前后端分离的,你保存到session有什么用?
×
楠木楠
如果觉得我的文章对您有用,请随意打赏。您的支持将鼓励我继续创作!
* 金额(元)
¥1 ¥5 ¥10 ¥20 其他金额
打赏人
留言
* 支付类型
微信扫码支付
打赏金额:
已支付成功
打赏金额: