我面临的问题是:before_filter操作是
我需要允许非注册用户访问购买页面(0.0.0.0:3000/purchase)而无需登录网站。这是我用我的客户控制器功能中的波纹管代码完成的,如波纹管和它的工作原理:
Customer_controller.rb
class CustomersController < ApplicationController
before_filter :authenticate_user!, :except => [:purchases]
before_action :set_menu
.
.
end
现在的问题是,从提交时的 “0.0.0.0:3000/purchase” 应重定向到 0.0.0.0:创建购买后,3000 / paymentpage 。
但是在从购买页面提交后,它会被重定向到登录页面,而不会进入付款页面。如何在不登录的情况下允许重定向到付款页面?我通过更新我的代码来尝试下面的波纹管,它可以工作:
before_filter :authenticate_user!, :except => [:purchases, :payments]
但问题是,现在付款页面也可以直接访问。
那么如何允许嵌套允许我的工作流从一种方法延续到另一种方法,而无需一直检查 befor_filter:authenticate_user!,一旦用户开始他的工作 before_filter中定义的可访问方法:authenticate_user!,:except =&gt; [:METHOD_NAME]。
答案 0 :(得分:3)
最后,我通过设置会话变量状态设置为TRUE的标志解决了我的问题,以便跟踪用户输入的链接是否遵循从一个页面到下一个页面的允许路径。
在这里,我将用我的代码解释:
首先,我除了购买方法外,无需登录即可直接访问任何用户。
客户控制器
before_filter :authenticate_user!, :except => [:purchases]
create_purchase方法
接下来,在我的代码结尾处的购买方法中,我设置了一个标志设置为true的会话变量。
session[:@customer_permited] = true
接下来在我的付款方式中,我将检查会话变量的状态,如果它是真的,用户可以继续使用它而无需登录,否则客户将被重定向到登录页面,因此如果用户尝试访问该链接也将被重定向到登录页面。
付款方式
if session[:@customer_permited].nil?
redirect_to new_user_session_path, :flash => { :danger => "Please login to continue" }
else
//my logic here.