我非常笨拙地用今天的Devise gem取代了我自己的认证系统(基于Michael Hartl的教程)。Devise的current_user不起作用?
我已经得到了大部分工作,但有很多与使用current_user
有关的错误。
此,例如,不工作了:
<% if current_user.admin? && !current_user?(user) %>
| <%= link_to "delete", user, method: :delete,
data: { confirm: "You sure?" } %>
<% end %>
我以前在一个会议助手曾CURRENT_USER定义如下:
module SessionsHelper
def sign_in(user)
remember_token = User.new_remember_token
cookies.permanent[:remember_token] = remember_token
user.update_attribute(:remember_token, User.encrypt(remember_token))
self.current_user = user
end
end
def current_user=(user)
@current_user = user
end
def current_user
remember_token = User.encrypt(cookies[:remember_token])
@current_user ||= User.find_by(remember_token: remember_token)
end
def current_user?(user)
user == current_user
end
我与免掉,认为设计提供了相同的功能,但似乎并非如此。在几乎所有以前使用current_user的情况下,我现在都会获得undefined method
current_user?'`。我希望能有一些全球性的东西可以使旧用法发挥作用?
任何指针非常赞赏。在我使用它的六个月中,我已经有了最糟糕的一天。
编辑:评论解释说我不再有current_user?
定义。我试着加入下面我users_controller,但它似乎并没有已经奏效:
def current_user?(user)
user == current_user
end
至少在此处显示的内容中,您有'current_user'定义,但不是'current_user?'。 –
对不起,我没有包含足够的旧代码。我只需要再次定义'current_user?'?如果是这样,因为我没有使用会话的概念? – Ossie
Devise中没有'current_user?'方法,只有'current_user'。如果你在代码中的任何地方使用它,你需要在users_helper或application_helper中自己定义它。事实上,在任何帮手中,他们都可以在任何视图和控制器中工作。 –