我使用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
。
My Devise Model看起来像这样:
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 %>
答案 0 :(得分:5)
在使用新的 turbo/hotwire 时,devise 可能会发生这种情况。
就我而言,我自定义了表单以设置 "data-turbo": "false"
像这样:
<%= form_for(resource, as: resource_name, url: confirmation_path(resource_name), html: { "data-turbo": "false", method: :post }) do |f| %>
答案 1 :(得分:0)
如果您使用respond_with
,则只能与资源一起使用。我遇到了这个问题,而且修复程序是render
。
如果是这样的话
render :text => 'false'
可能有所帮助。但是要确保我们必须看到你的模型来找出更多的问题。
另一个问题可能是responds_with
期望ActiveRecord
对象为其绘制路线。
我不确定它是如何在您的代码中实现的,但这些是我过去解决此错误的一些方法。
答案 2 :(得分:0)
我在另一个项目中遇到了这个问题。就我而言,我缺少create
操作的模板文件。如果我们看一下devise的create函数,它会根据请求的“ Accept”标头的mime类型,使用respond_with
方法呈现正确的信息。例如,使用html响应,它可能正在尝试加载create.html.erb
(或其他模板类型,具体取决于您的配置)。
有点晚了,希望对你有帮助