IT序号网

java之在 Java 中设计确认 token

over140 2023年09月15日 程序员 10 0

似乎无法创建一种功能性方法来从 Java for Devise 插入用户。目前有这些字段: “_ID”, “访问权限”, “确认发送时间”, “确认 token ”, “确认时间”, “电子邮件”, “加密密码”, “登录计数”

我能够插入一个算作用户的文档。问题是当我去: http://www.mysite.com:3000/users/confirmation?confirmation_token=TOKENHERE

我收到一条消息说它无效。

编辑 1: 当我为该用户(WHICH GENERATES A NEW TOKEN) 重新发送确认指令时,用户可以登录。这证实了我对 token 是问题所在的怀疑。如何将 Devise 的 token 生成器移植到 Java?

编辑 2: 当我在网站上注册时,它说我应该检查确认链接。但是,如果我进入 Mongo shell,手动取出确认 token 并将其粘贴到 site.com/users/confirmation?confirmation_token= 然后它不起作用!但是,如果我实际使用发送给我的确认链接,它就可以工作。我怎样才能制作一个 VALID token ,全部来自 Java。请帮忙!

请您参考如下方法:

这个问题你应该引用this stackoverflow answerprotect_from_forgery 的 Rails API .

简短的回答是在您的 Controller 中禁用伪造保护,但这会使您的应用程序容易受到 CSRF 攻击:

skip_before_action :verify_authenticity_token 

更好的方法是使用 JSON 或 XML 请求进行身份验证,因为这些请求不受 CSRF 保护。您可以找到设计的解决方案 here .

编辑

Monkey 补丁设计用于保存未编码的确认 token 。在你的 config/initializers/devise.rb

module Devise 
  module Models 
    module Confirmable 
      def generate_confirmation_token 
        raw, enc = Devise.token_generator.generate(self.class, :confirmation_token) 
        @raw_confirmation_token = raw 
        self.my_unencoded_column = raw # Patch 
        self.confirmation_token = enc 
        self.confirmation_sent_at = Time.now.utc 
      end 
    end 
  end 
end 


评论关闭
IT序号网

微信公众号号:IT虾米 (左侧二维码扫一扫)欢迎添加!