设计'重置密码'曾经在我的应用程序中工作,但现在它正在破碎。我在rails 4.1.0上,设计3.2.4。以下是发生的事情:
1)用户点击忘记密码,输入电子邮件,收到电子邮件中的更改密码链接,点击并正确发送到更改密码页面,输入新密码,然后登录。2)但如果他们退出,他们将无法使用新密码登录。
在控制台中,更改密码后,加密密码会发生变化。但它没有使用正确的密码进行更新。
仅供参考我有定制的' new'并且'创造'用户注册中的操作。否则,这就是我在用户模型中的设计:
class User < ActiveRecord::Base
# Include default devise modules. Others available are:
# :confirmable, :lockable, :timeoutable and :omniauthable
devise :database_authenticatable, :registerable,
:recoverable, :rememberable, :trackable, :validatable
这是我的更改密码表单...
<%= form_for(resource, :as => resource_name, :url => password_path(resource_name), :html => { :method => :put }) do |f| %>
<%= devise_error_messages! %>
<% if notice %>
<div class="alert-info alert">
<p><%= notice %></p>
</div>
<% end %>
<% if alert %>
<div class="alert-danger alert">
<p><%= alert %></p>
</div>
<% end %>
<%= f.hidden_field :reset_password_token %>
<div class='form-group'>
<%= f.label :password, "New password" %>
<%= f.password_field :password, :autofocus => true, :class=>'form-control' %>
</div>
<div class='form-group'>
<%= f.label :password_confirmation, "Confirm new password" %>
<%= f.password_field :password_confirmation, :class=>'form-control' %>
</div>
<div class='form-group center formSubmit'>
<%= f.submit "Change my password", :class=>'btn btn-large btn-primary'%>
</div>
<% end %>
最后,这是我的设计路线:
devise_for :users, :controllers => {:registrations => "registrations"}
as :user do
post "/users/sign_up" => "registrations#create", :as => :v2_user_registration
end
真的很奇怪,对吗?
更新:
此处的应用程序控制器:
class ApplicationController < ActionController::Base
# Prevent CSRF attacks by raising an exception.
# For APIs, you may want to use :null_session instead.
include Pundit
include SessionsHelper
protect_from_forgery with: :exception
before_action :set_user
rescue_from Pundit::NotAuthorizedError, with: :user_not_authorized
private
def auth_user
if params[:special]
user = User.find_by_special(params[:special])
if user
sign_in user
redirect_to '/files'
end
authenticate_user!
else
authenticate_user!
end
end
def set_user
Gon.global.user = current_user
end
end