对这个名字我也有同感,当时在群里第一次看到 em-我就不愿意去看细节了,感慨了一声名也、命也。可能我的强迫症过于严重了,但真不愿意去想以了解一个名字不优雅的框架。
#4 楼 @darkbaby123 deserialization 我前面就用了,但它不会自动将 dash 转为 underscore。
在我司玩网游的一概不要,在职员工发现玩网游的一概开除。
@darkbaby123 谢谢你有见地的回复,帮我弄清了这背后的原因。最后我还是遵循了推荐规范,API 给出和接接收的数据都是 dash 连接。给出的时候接受 Active Model Serializer 的默认设置;接收的时候增加了一个 Filter:
# Transform keys in json api data, '-' to '_'
def transform_param_keys
params[:data][:attributes].transform_keys! { |key| key.to_s.tr("-", "_") } if request.headers['Content-Type'] == 'application/vnd.api+json'
end
从而将所有请求的数据中的 dash 转为 underscore。
@darkbaby123 你说的对,JWT 确实不适合这种场景,还是自己加密一个 token 比较合适。
@flowerwrong nothing, just joking. 想我辛苦折腾了好几天。
@flowerwrong 可以理解为这是在炫耀吗
@darkbaby123 jwt 是可以加密的。gem jwt 中 encode 方法默认使用 HS256 算法加密。
我最终使用了 Redis 缓存+jwt 的方式。服务器端先将验证码保存在缓存中,key 是 SecureRandom.urlsafe_base64,然后将 key 放入 jwt 加密发送到客户端。客户端请求的时候发送验证码(注:短信/邮件发给他的)和 token,然后用解密出来的 key 从缓存中取出验证码和客户端发来的比较,通过则继续。。。