目前在Rails 4上使用Devise 3.5.2,并启用了Devise的可跟踪功能。
通过一系列微服务,我们在RequestStore中拥有客户端的IP地址。除了我们想要将IP地址保存到user.current_sign_in_ip
属性之外,它的效果很好。
我试着这样做:
def update_tracked_fields!(*)
self.current_sign_in_ip = '10.0.0.1'
super
end
但是这并没有提供所需的行为,因为在登录时,last_sign_in_ip
会获得固定的10.0.0.1
地址。
覆盖Devise用于存储IP的IP地址的最佳方法是什么?
非常感谢
答案 0 :(得分:1)
查看Devise updated_tracked_fields
method的片段:
old_current, new_current = self.current_sign_in_ip, request.remote_ip
self.last_sign_in_ip = old_current || new_current
self.current_sign_in_ip = new_current
您可以看到current_sign_in_ip
已从request.remote_ip
重新分配。所以你的代码没有任何效果。
使其工作的一种方法是尝试此代码:
def update_tracked_fields!(request)
update_tracked_fields(request)
self.current_sign_in_ip = '10.0.0.1'
save(validate: false)
end
甚至更好:
def update_tracked_fields(request)
super
self.current_sign_in_ip = '10.0.0.1'
end