2

我使用带有devise,simple formhamlgems 的 Rails 3 应用程序。我的应用程序也支持很少的语言环境。我在主页上创建了简单的链接:

%p
  = link_to "Change pass", edit_user_password_path

应用程序向所有人显示此链接(只是为了测试它)。但我发现非登录用户可以打开这个链接。但是当登录用户打开此链接时,系统会告诉您:

You are already signed in. 

我不知道我做错了什么。

我的用户模型:

class User < ActiveRecord::Base
  # Include default devise modules. Others available are:
  # :token_authenticatable, :confirmable,
  # :lockable, :timeoutable and :omniauthable
  devise :database_authenticatable, :registerable,
         :recoverable, :rememberable, :trackable, :validatable

  # Setup accessible (or protected) attributes for your model
  attr_accessible :email, :password, :password_confirmation, :remember_me
  # attr_accessible :title, :body
end

我的路线:

  scope ":locale", locale: /#{I18n.available_locales.join("|")}/ do
    devise_for :users, :skip => [:registrations]                                          

    root :to => 'pages#home'
  end

  match '*path', to: redirect("/#{I18n.default_locale}/%{path}"), constraints: lambda { |req| !req.path.starts_with? "/#{I18n.default_locale}/" }
  match '', to: redirect("/#{I18n.default_locale}")

我还在views/devise/shared/_links.haml中评论了几行

- if devise_mapping.registerable? && controller_name != 'registrations'
  / = link_to t(".sign_up_link"), new_registration_path(resource_name)
  / %br/

因为我不想让用户注册并查看链接。

4

1 回答 1

5

edit_user_password_pathpassword_controller当用户需要重置密码时,Devise 中使用。我认为您正在寻找的是edit_user_registration_path. 这将使用户编辑registrations_controller他们可以修改其电子邮件地址和密码的操作。这是默认的设计行为。

如果您想提供更多自定义功能,可以阅读Devise Wiki上的教程,了解如何提供自定义密码更改功能。

另请注意,当用户关注时edit_user_registration_path,他们可以选择取消您可能希望从视图中删除的帐户,或使用自定义方法来避免这种不需​​要的功能。

于 2012-08-27T12:58:14.037 回答