0

我已经使用 Rails 4.2.7.1 成功设置了 Devise 4.2 'recoverable' 模块。用户体验如下:

  1. 用户访问该站点,进入登录页面,单击“帮助,我忘记了密码”。
  2. 用户被发送到随后的页面,他们在其中输入他们的电子邮件地址。如果该地址被接受,他们会通过电子邮件(我们称之为“恢复电子邮件”)发送一个指向他们可以去重置密码的地方的链接。

我遇到的问题出在恢复电子邮件的正文中。里面的一切都有效!但是,指向我的网站的链接省略了网站名称中的“www”,导致链接到的页面显示以下错误:

无法访问此站点 找不到 example.com 的服务器 DNS 地址。ERR_NAME_NOT_RESOLVED

如果我按照该电子邮件正文中的链接访问该页面,我将收到该错误。

生成的链接是http://example.com/admin/users/password/edit.10?reset_password_token=NfGEHb3z6uF7qPyqd79V

奇怪的是,如果我在这个错误页面的地址栏中手动添加“www”,一切都会很好。也就是说,以下工作:

http://www.example.com/admin/users/password/edit.10?reset_password_token=NfGEHb3z6uF7qPyqd79V

如果我删除除以下内容之外的所有内容,它也可以工作: http://example.com/admin/

请注意,在这种情况下,我省略了“www”,但它仍然有效。

这是恢复电子邮件的代码:

<p>Hello <%= @resource.email %>!</p>

<p>Someone has requested a link to change your password. You can do this through the link below.</p>

<p><%= link_to 'Change my password', edit_admin_user_password_url(@resource, :reset_password_token => @token) %></p>

<p>If you didn't request this, please ignore this email.</p>
<p>Your password won't change until you access the link above and create a new one.</p>

以下是 routes.rb 的摘录,如果相关的话:

root :to => 'pages#index'

devise_for :users, {:class_name => "User", :module => :devise, :controllers => { :sessions => "admin/sessions" } }
resources :users

namespace :admin do
  devise_for :users, {:class_name => "User", :module => :devise, :controllers => { :sessions => "admin/sessions" } }
  resources :users, :properties, :locations, :pages, :companies, :islands, :tags, :property_types, :articles, :announcements, :features
  resources :agents,         :controller => "users"
  resources :administrators, :controller => "users"
  resources :superadmins,    :controller => "users"
  resources :photos do
    collection do
      delete 'destroy_multiple'
    end
  end
end

一些可能不相关的细节:

  • 该网站托管在 Heroku 上。
  • 我用于测试的电子邮件客户端是 GMail。
  • DNS 和域内容是 AWS Route 53。

可能有人知道我做错了什么吗?

4

1 回答 1

1

您可以在不更改代码的情况下解决此问题。如果你告诉你的 DNS www.example.com 和 example.com 解析到同一个服务器,你应该没问题。

于 2017-05-10T20:10:00.867 回答