在 authy-devise 中自定义视图
Customizing the views in authy-devise
我正在尝试通过 authy 2FA
of twilio
使用 devise-authy
gem.
实施双因素身份验证
我想为 2FA 自定义三个页面的视图。
第一页 - 我的登录页面,用户在其中输入 username
和 password
,on submit
它将被重定向到一个页面
第二页 - 在此页中,他可以select 2FA 方法 接收代码通过 phone 或短信,然后他被重定向
第三页 - 他终于在这里输入了代码。
我可以配置前两个页面。
我的问题是在第三页,我正在设置authy form
进行代码验证,我得到错误 undefined method id for nil class
<%= verify_authy_form do %>
<legend><%= I18n.t('submit_token_title', {:scope => 'devise'}) %></legend>
<%= label_tag :token %>
<%= text_field_tag :token, "", :autocomplete => :off, :id => 'authy-token' %>
<label>
<%= check_box_tag :remember_device %>
<span><%= I18n.t('remember_device', {:scope => 'devise'}) %></span>
</label>
<!-- Help tooltip -->
<!-- You need to configure a help message. -->
<!-- See documentation: https://github.com/authy/authy-form-helpers#help-tooltip -->
<!-- <%= link_to '?', '#', :id => 'authy-help' %> -->
<%= authy_request_sms_link %>
<%= authy_request_phone_call_link %>
<%= submit_tag I18n.t('submit_token', {:scope => 'devise'}), :class => 'btn' %>
<% end %>
我在这一行中遇到错误 verify_authy_form
在检查 gem 的代码时,我发现我需要 @authy_id
所以我尝试了
<%@authy_id=User.find(session[:user_id]).authy_id%>
鉴于没有还是没有成功。
这是我的 Users::AuthyCustomController
,我已经覆盖了 gem
中所述的一些方法
class Users::AuthyCustomController < Devise::DeviseAuthyController
protected
def after_authy_enabled_path_for(resource)
my_own_path
end
def after_authy_verified_path_for(resource)
my_own_path
end
def after_authy_disabled_path_for(resource)
my_own_path
end
def invalid_resource_path
my_own_path
end
def authentication_sms
end
def authentication_phone
@authy_id=User.find(session[:user_id]).authy_id
# redirect_to user_verify_authy_path
# redirect_to user_verify_authy_path and return
end
end
我用谷歌搜索,但找不到解决方案
I am getting error undefined method id for nil class
def verify_authy_form(opts = {}, &block)
opts = default_opts.merge(:id => 'devise_authy').merge(opts)
form_tag([resource_name, :verify_authy], opts) do
buffer = hidden_field_tag(:"#{resource_name}_id", @resource.id)
buffer << capture(&block)
end
end
我相信 @resource
是 nil
所以当它 @resource.id
触发 error
我相信此表单是从此
管理的
# verify 2fa
def POST_verify_authy
token = Authy::API.verify({
:id => @resource.authy_id,
:token => params[:token],
:force => true
})
if token.ok?
@resource.update_attribute(:last_sign_in_with_authy, DateTime.now)
session["#{resource_name}_authy_token_checked"] = true
remember_device if params[:remember_device].to_i == 1
if session.delete("#{resource_name}_remember_me") == true && @resource.respond_to?(:remember_me=)
@resource.remember_me = true
end
sign_in(resource_name, @resource)
set_flash_message(:notice, :signed_in) if is_navigational_format?
respond_with resource, :location => after_sign_in_path_for(@resource)
else
handle_invalid_token :verify_authy, :invalid_token
end
end
您可以通过检查并包含 rake routes
的相关输出来证明这一点。所以也许你应该调试那两段代码,控制器动作负责将 @resource
馈送到 form
我正在尝试通过 authy 2FA
of twilio
使用 devise-authy
gem.
我想为 2FA 自定义三个页面的视图。
第一页 - 我的登录页面,用户在其中输入
username
和password
,on submit
它将被重定向到一个页面第二页 - 在此页中,他可以select 2FA 方法 接收代码通过 phone 或短信,然后他被重定向
第三页 - 他终于在这里输入了代码。
我可以配置前两个页面。
我的问题是在第三页,我正在设置authy form
进行代码验证,我得到错误 undefined method id for nil class
<%= verify_authy_form do %>
<legend><%= I18n.t('submit_token_title', {:scope => 'devise'}) %></legend>
<%= label_tag :token %>
<%= text_field_tag :token, "", :autocomplete => :off, :id => 'authy-token' %>
<label>
<%= check_box_tag :remember_device %>
<span><%= I18n.t('remember_device', {:scope => 'devise'}) %></span>
</label>
<!-- Help tooltip -->
<!-- You need to configure a help message. -->
<!-- See documentation: https://github.com/authy/authy-form-helpers#help-tooltip -->
<!-- <%= link_to '?', '#', :id => 'authy-help' %> -->
<%= authy_request_sms_link %>
<%= authy_request_phone_call_link %>
<%= submit_tag I18n.t('submit_token', {:scope => 'devise'}), :class => 'btn' %>
<% end %>
我在这一行中遇到错误 verify_authy_form
在检查 gem 的代码时,我发现我需要 @authy_id
所以我尝试了
<%@authy_id=User.find(session[:user_id]).authy_id%>
鉴于没有还是没有成功。
这是我的 Users::AuthyCustomController
,我已经覆盖了 gem
class Users::AuthyCustomController < Devise::DeviseAuthyController
protected
def after_authy_enabled_path_for(resource)
my_own_path
end
def after_authy_verified_path_for(resource)
my_own_path
end
def after_authy_disabled_path_for(resource)
my_own_path
end
def invalid_resource_path
my_own_path
end
def authentication_sms
end
def authentication_phone
@authy_id=User.find(session[:user_id]).authy_id
# redirect_to user_verify_authy_path
# redirect_to user_verify_authy_path and return
end
end
我用谷歌搜索,但找不到解决方案
I am getting error
undefined method id for nil class
def verify_authy_form(opts = {}, &block)
opts = default_opts.merge(:id => 'devise_authy').merge(opts)
form_tag([resource_name, :verify_authy], opts) do
buffer = hidden_field_tag(:"#{resource_name}_id", @resource.id)
buffer << capture(&block)
end
end
我相信 @resource
是 nil
所以当它 @resource.id
触发 error
我相信此表单是从此
# verify 2fa
def POST_verify_authy
token = Authy::API.verify({
:id => @resource.authy_id,
:token => params[:token],
:force => true
})
if token.ok?
@resource.update_attribute(:last_sign_in_with_authy, DateTime.now)
session["#{resource_name}_authy_token_checked"] = true
remember_device if params[:remember_device].to_i == 1
if session.delete("#{resource_name}_remember_me") == true && @resource.respond_to?(:remember_me=)
@resource.remember_me = true
end
sign_in(resource_name, @resource)
set_flash_message(:notice, :signed_in) if is_navigational_format?
respond_with resource, :location => after_sign_in_path_for(@resource)
else
handle_invalid_token :verify_authy, :invalid_token
end
end
您可以通过检查并包含 rake routes
的相关输出来证明这一点。所以也许你应该调试那两段代码,控制器动作负责将 @resource
馈送到 form