Rails 4 before_filter :authenticate_user!, :except => ["some function name"]

Rails 4 before_filter :authenticate_user!, :except => ["some function name"]

我的 :before_filter 操作面临的问题是,

  1. 我需要允许非注册用户访问购买页面 (0.0.0.0:3000/purchase) 而无需登录 site.This 我在我的代码中使用以下代码完成客户控制器功能如下所示并且有效:

    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 => [:method_name][ 中定义的可访问方法开始工作=38=].

最后,我通过将会话变量状态设置为 TRUE 的标志来解决我的问题,以跟踪输入的用户 links 正在遵循从一页到下一页的允许路径。

这里我用我的代码来解释一下:

首先我排除了purchase方式,任何用户无需登录直接访问

客户控制员

before_filter :authenticate_user!, :except => [:purchases]

create_purchase方法

接下来在代码末尾的购买方法中,我设置了一个会话变量,并将标志设置为 true。

session[:@customer_permited] = true

接下来在我的付款方式中,我将检查会话变量的状态,如果它是 TRUE,用户可以继续使用它而无需登录,否则客户将被重定向到登录页面,所以如果用户尝试直接访问 link 也会被重定向到登录页面。

付款方式

 if session[:@customer_permited].nil?
        redirect_to new_user_session_path, :flash => { :danger => "Please login to continue" }
 else
//my logic here.