我正在使用obfuscate_id gem(https://github.com/namick/obfuscate_id)。
我们通过在每个模型的顶部插入一行来模糊ID:
obfuscate_id
它的效果很好并且符合预期。我的ID被混淆了。
但是,作为我ApplicationController
中某些逻辑的一部分,我有一些逻辑来检查当前用户,并且每个控制器都可以访问这些方法作为帮助者:
def current_user
@current_user ||= User.find(session[:user_id]) if session[:user_id]
end
然而,我收到错误:
无法找到ID = 5164061535的用户
似乎无法将混淆的ID转换回find()的正常形式。
如何让控制器识别出在每个模型中所做的混淆。
我的用户模型是这样的:
class User < ActiveRecord::Base
# This part obfuscates the user ID
obfuscate_id
has_one :profile, dependent: :destroy
has_many :pins
has_many :replies, through: :pins
end
我有什么想法让ApplicationController
认出这个?在每个控制器本身中执行find()很好,但由于ApplicationController
没有自己的模型,所以它似乎并不知道它。
谢谢, 迈克尔。
答案 0 :(得分:1)
试试这个......
@current_user ||= User.find(User.deobfuscate_id(session[:user_id])) if session[:user_id]
答案 1 :(得分:0)
奇怪的是,我最终尝试了这个:
@current_user ||= User.find_by_id(session[:user_id]) if session[:user_id]
它有效!但是,为什么?
User.find()
本身并没有使用这个宝石。所以,虽然它现在正在发挥作用,但它对我的确切原因有点关注。
如果有人可以在这里添加任何东西,那就太棒了。
谢谢!