以前 cookie session 的机制,我可以把验证码放在 session 里面,然后通过 cookie 索引 session 可以获取验证码 如果使用 jwt 的话我看大部分的方案都是不用 session,验证码的数据把存在 token 里面,感觉不大安全,而且我看 jwt 都是登录后服务器返回的,我做验证码验证的时候用户还没登录呢怎么校验?
我做的手机号加验证码功能
如果你说的是图片验证码,应该也可以根据 ip 或者其它特有的属性创建条记录
验证码验证和 JWT 好像没什么关系?
JWT 登录的大概流程----参考代码使用这个ruby-jwt
客服端 输入用户名和密码登录
服务器 验证用户名,密码,验证码,正确就返回一个 jwt token,里面包含一些用户信息,比如 ID 之类的
payload = {user_id: user.id, expire: (Time.now + 1.week).to_i}
token = JWT.encode payload, secret_key
客服端 把接收到的 token 发送给服务器
服务器 对 token 进行解析,得到你开始设置的用户信息,比如 ID 什么的,验证 ID 是否有效,是否过期之类的
decoded_token = JWT.decode token, nil, false
decoded_token包含了你开始设置的user_id和expire
验证码信息直接放 JWT 里面不太阔学,JWT 的核心是校验,数据相当于是明文的,倒是可以 JWT 做的 auth,验证码放在后端存储里,比如 Rails.cache
Rails 的 session 基于 cookies 存储时是加密的,所以可以放敏感信息,同理你可以对验证码先加密,再放到 JWT 中,不过这就有点舍近求远了
另外补充一下,JWT 更常见的使用场景是非浏览器情况下的 API 通讯,在已知是面向浏览器用户的 API 上为什么不直接用 cookies 呢
当人手里拿着锤子的时候,看满世界都是钉子
我是做 windows 应用开发和测试开发的,web 开发接触的比较少,所以不是很懂,我前端用 vue 写的单页应用,调用 rails 写的 api 服务,这样的场景下用 rails 的 cookie session 机制好吗?因为我的项目是 rails new --api 生成的,我看了下中间件里面拿掉了 cookie 和 session,那就再把 cookie session 的中间件加进来?
即使前后端分离,在浏览器场景下,cookie 和 session 机制依然适合
If you're on Rails 5, and want to preserve config.api_only = true you could extend the middleware to add the sessions layer, adding this code after class Application < Rails::Application in config/application.rb
config.middleware.use ActionDispatch::Cookies config.middleware.use ActionDispatch::Session::CookieStore, key: '_namespace_key'
This could come in handy when you want to have a rails api-only enabled app but have to manage user sessions with an administration panel like ActiveAdmin or Rails_Admin.
以上来自 https://stackoverflow.com/questions/15342710/adding-cookie-session-store-back-to-rails-api-app