我有一個漂亮的標準User
模型與設計。管理員在模型上使用布爾值:admin
進行控制,而非管理員的用戶不能自行管理(即只有管理員可以對用戶進行更改)。設計:允許用戶重置密碼只有
我想要的是允許用戶重置他們的密碼,如果他們忘記了。他們會輸入他們的電子郵件地址,然後通過電子郵件發送令牌,以授予他們訪問權限以更改它。我已經開始了一個解決方案,但我真的不知道如何繼續。
user.rb
class User < ActiveRecord::Base
devise :database_authenticatable, :registerable, :recoverable, :rememberable, :trackable, :validatable
attr_accessor :current_password
attr_accessible :name, :password, :password_confirmation, :current_password, :email, :remember_me, :ftp, :colour1, :colour2, :logo, :logo2, :address, :url, :disclosure, :general_advice, :facebook, :twitter, :brand_id, :analytics
attr_protected :admin
validates_uniqueness_of :email, :ftp
belongs_to :brand
has_many :docs
has_many :orders, :through => :docs
has_attached_file :logo
has_attached_file :logo2
end
class Ability
include CanCan::Ability
def initialize(user)
user ||= User.new #guesting
if user.admin?
can :manage, :all
else
can :manage, :recoverable
end
end
end
而這裏的方法:
def reset
@idiot = User.where(:email => params[:email]).first
unless @idiot.nil?
Notifier.send_reset_notice(@idiot).deliver
@idiot.send_reset_password_instructions
redirect_to new_user_session_url
else
redirect_to new_user_session_url, :flash => { :error => "That email address matches no user." }
end
end
用戶收到的電子郵件設計,但點擊該鏈接將用戶帶到應用程序的根,而不是一密碼重置表單。我不知道如何從這裏開始。有什麼想法嗎?乾杯!
UPDATE
相關路線:
devise_for :users, :path => "d"
devise_scope :user do
get '/sign_in' => 'devise/sessions#new'
get '/sign_out' => 'devise/sessions#destroy'
end
你必須要嘗試這種解決方案[設計維基](HTTPS:// GI thub.com/plataformatec/devise/wiki/How-To%3a-Allow-users-to-edit-their-password)? – 2013-04-10 05:08:43
是的,它不適合我的情況。感覺就像我的路線有問題或什麼的。我會用我的路線更新這個問題。 – 2013-04-10 05:12:22