【发布时间】:2016-03-25 04:36:38
【问题描述】:
我正在使用 Rails 4.2 和 Devise。每当我尝试使用重置密码页面时,我都会收到以下错误:
Nil location provided. Can't build URI. on Password reset
在生产中它带有 500 内部服务器错误。
带有重置令牌的电子邮件确实会发送。如果用户在他们的电子邮件中打开链接,他们可以返回该站点更改密码。尽管如此,单击“重置密码按钮”时总是会出现 500 错误。
我之前用过很多次,从来没有遇到过这个问题。我怀疑它可能与本教程有关:
并在我的应用程序控制器中明确编写resource_name、resource 和devise_mapping 方法,但它们并没有干扰任何其他设计路线,即使将它们注释掉,错误仍然存在。
编辑:
我没有PasswordController,只是坚持使用 Devise 的大部分默认设置。我也没有在我的应用程序的任何地方使用respond_with。
我的设计模型如下所示:
class User < ActiveRecord::Base
devise :database_authenticatable, :registerable, :confirmable, :lockable,
:recoverable, :rememberable, :trackable, :validatable,
:omniauthable, :omniauth_providers => [:stripe_connect]
validates :username, presence: true
validates :time_zone, presence: true
has_one :teacher, dependent: :destroy
has_many :bookings, foreign_key: :student_id
has_many :reviews, foreign_key: :student_id, dependent: :destroy
has_many :messages, dependent: :destroy
VALID_EMAIL_REGEX = /\A[\w+\-.]+@[a-z\d\-.]+\.[a-z]+\z/i
validates_format_of :email, with: VALID_EMAIL_REGEX
end
编辑 3:
以下是相关路线:
get 'sessions/create'
devise_for :users, :controllers => { :omniauth_callbacks => "omniauth_callbacks" }
resources :users, :only =>[:show]
devise_scope :user do
get 'bookings', to: 'bookings#bookings'
end
这里是视图:
<%= form_for(resource, :as => resource_name, :url => password_path(resource_name), :html => { :method => :post, :class => "sky-form" }) do |f| %>
<%= devise_error_messages! %>
<h3 class="text-center"><%= t('.header') %></h3>
<section>
<div class="row">
<label class="label col col-4"><%= t('.email') %></label>
<div class="col col-8">
<label class="input">
<%= f.email_field :email %>
</label>
</div>
</div>
</section>
<footer class="text-right">
<%= f.submit t('.resetpwbtn'), class: "btn btn-theme-bg btn-lg" %>
</footer>
<% end %>
【问题讨论】:
-
你在调用 JSON api?
-
Shiv Raj:不,我不是。
-
您需要分享您的 Devise 模型、PasswordsController(如果有)以及其他信息,例如 Devise 生成的迁移文件,以便我们了解更多信息。
-
我只是写在方法里。但我没有使用
PasswordsController
标签: ruby-on-rails ruby ruby-on-rails-4 devise