设计'重置密码'不保存新密码但允许您登录

时间:2014-04-24 15:19:07

标签: ruby-on-rails ruby-on-rails-4 devise passwords

设计'重置密码'曾经在我的应用程序中工作,但现在它正在破碎。我在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

0 个答案:

没有答案