我制作了一个新的rails-api应用程序,其中集成了devise_auth_token。目前注册,忘记密码正在运行。但无法重置密码才能正常工作。
邮件中发送的确认网址成功:错误回复。
以下是确认网址
以下是重置电子邮件的服务器日志
开始GET" / auth /密码/编辑?config = default& redirect_url = foo& reset_password_token = [FILTERED]" for :: 1 at 2015-09-24 14:41:21 +0530 由DeviseTokenAuth处理:: PasswordsController#edit as /
参数:{" config" =>"默认"," redirect_url" =>" foo", " reset_password_token" =>" [已过滤]"}未经许可的参数:config, redirect_url用户加载(0.2ms)SELECTusers
。* FROMusers
WHEREusers
。reset_password_token
= ' 0b3dfdf3a80dce289df8c2cb16c528614b302534264e85e747c4f6b51583da15' ORDER BYusers
。id
ASC LIMIT 1已完成404未在5ms内找到 (浏览次数:0.3ms | ActiveRecord:0.2ms)以下是通过密码发送的确认电子邮件 复位。
Started POST "/auth/password?email=user@user.com&redirect_url=foo" for ::1 at 2015-09-24 14:04:05 +0530 Processing by
DeviseTokenAuth :: PasswordsController #create as / 参数: {"电子邮件" =>" user@user.com"," redirect_url" =>" foo"}未经许可 参数:redirect_url未授权参数:redirect_url用户 加载(66.5ms)SELECT
users
。* FROMusers
WHERE(BINARY uid = ' user@user.com' AND provider =' email')ORDER BYusers
。id
ASC LIMIT 1用户加载(9.8ms)SELECTusers
。* FROMusers
WHEREusers
。reset_password_token
= ' 0b3dfdf3a80dce289df8c2cb16c528614b302534264e85e747c4f6b51583da15' ORDER BYusers
。id
ASC LIMIT 1(0.1ms)BEGIN SQL(17.7ms) 更新users
SETreset_password_token
= ' 0b3dfdf3a80dce289df8c2cb16c528614b302534264e85e747c4f6b51583da15&#39 ;,reset_password_sent_at
=' 2015-09-24 08:34:05',updated_at
= ' 2015-09-24 08:34:05' WHEREusers
。id
= 6(63.9ms)COMMIT
渲染 /home/anjan/.rvm/gems/ruby-2.2.3/gems/devise_token_auth-0.1.34/app/views/devise/mailer/reset_password_instructions.html.erb (16.2ms)Devise :: Mailer#reset_password_instructions:已处理的出站邮件 424.3ms
已发送邮件至user@user.com(64.4ms)日期:星期四,2015年9月24日14:04:06 +0530来自:account@qzick.com回复:account@qzick.com致:user@user.com消息ID: < 5603b57e80ae0_1cb520cceb4374ed@anjanbetsy.mail>主题:重置 密码说明Mime-Version:1.0 Content-Type:text / html; charset = UTF-8 Content-Transfer-Encoding:7bit电子邮件:user@user.com provider:email redirect-url:foo client-config:default
Hello user@user.com!
有人要求提供更改密码的链接。你可以做 这可以通过下面的链接。
更改 我的密码
如果您没有提出此请求,请忽略此电子邮件。
您的 密码不会更改,直到您访问上面的链接并创建一个新的密码 之一。
在979ms完成200 OK(浏览次数:0.6ms | ActiveRecord:158.1ms)
伙计们会对此表示感谢。 即使是邮件中发送的令牌与生成的令牌不同也是如此。是这样的。
以下是我的用户模型。
{"令牌" =>" $ 2a $ 10 $ l766Mu / s8IUIHi9r3sz40ODQk2R.YDo283JQ.82Lijb3fjJ5Unqgq","到期" => 1444283710},&# 34; H2Cqp2kIt56BYikqXp1HgA" => {"令牌" =>" $ 2a $ 10 $ upMCA8ZKLXvq9VjVaz2Vp.sZu7zr2lSTCFrxWnBmg4wC2gQrW9sIW","到期" => 1444293849}} ,created_at:" 2015-09-24 05:55:10",updated_at:" 2015-09-24 08:44:09">
这是我的用户模型文件,如下所示
class User < ActiveRecord::Base
# Include default devise modules.
devise :database_authenticatable, :registerable,
:recoverable, :rememberable, :trackable, :validatable,
:omniauthable
include DeviseTokenAuth::Concerns::User
#Deleted ":confirmable," from above
end
以下是我的架构。
ActiveRecord::Schema.define(version: 20150921074353) do
create_table "users", force: :cascade do |t|
t.string "provider", limit: 255, default: "email", null: false
t.string "uid", limit: 255, default: "", null: false
t.string "encrypted_password", limit: 255, default: "", null: false
t.string "reset_password_token", limit: 255
t.datetime "reset_password_sent_at"
t.datetime "remember_created_at"
t.integer "sign_in_count", limit: 4, default: 0, null: false
t.datetime "current_sign_in_at"
t.datetime "last_sign_in_at"
t.string "current_sign_in_ip", limit: 255
t.string "last_sign_in_ip", limit: 255
t.string "confirmation_token", limit: 255
t.datetime "confirmed_at"
t.datetime "confirmation_sent_at"
t.string "unconfirmed_email", limit: 255
t.string "name", limit: 255
t.string "nickname", limit: 255
t.string "image", limit: 255
t.string "email", limit: 255
t.text "tokens", limit: 65535
t.datetime "created_at"
t.datetime "updated_at"
end
add_index "users", ["email"], name: "index_users_on_email", using: :btree
add_index "users", ["reset_password_token"], name: "index_users_on_reset_password_token", unique: true, using: :btree
add_index "users", ["uid", "provider"], name: "index_users_on_uid_and_provider", unique: true, using: :btree
end
我的PasswordController文件如下:
class PasswordController < ApplicationController
config.action_controller.action_on_unpermitted_parameters = :log
end
答案 0 :(得分:1)
我也遇到了一些疯狂的困难。这就是我要做的事情,让它与AngularJS前端和Rails一起工作:
覆盖 PasswordsController create
,update
,edit
和after_resetting_password_path_for
对于create
和update
函数,主要问题是我需要它来呈现json响应,所以它在respond_with resource
之类的地方改为{{1} (您可以将资源和状态更改为应用程序所需的内容,与render方法相同)
对于render json: resource, status: <status>, && return
,我没有使用edit
,而是从电子邮件中抓取重定向网址,只需执行after_sending_reset_password_instructions_path_for
我更改了redirect_to params[:redirect_url]
以重定向我希望用户登录的位置。
我还必须更改after_resetting_password_path_for
模板。包含 edit_password_url 的行:
reset_password_instructions.html.erb
然后在<p><%= link_to t('.password_change_link'), edit_password_url(@resource, reset_password_token: @token, config: 'default', redirect_url: message['redirect-url'].to_s+'?reset_token='+@token).html_safe %></p>
,我必须让设计知道使用我的控制器:
routes.rb
我希望有所帮助!