Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/ruby-on-rails-4/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Ruby on rails render/head in before_操作不会停止执行其余操作_Ruby On Rails_Ruby On Rails 4_Before Filter - Fatal编程技术网

Ruby on rails render/head in before_操作不会停止执行其余操作

Ruby on rails render/head in before_操作不会停止执行其余操作,ruby-on-rails,ruby-on-rails-4,before-filter,Ruby On Rails,Ruby On Rails 4,Before Filter,我有一个私人方法来验证你的用户!在我的应用程序控制器中,它验证标头中的令牌,并在找到时返回用户记录。这是它的样子 def authenticate_user! # authenticate @current_login = Login.where(oauth2_token: bearer_token).first head 401 if @current_login.nil? # and return @current_user = @current_login.user h

我有一个私人方法来验证你的用户!在我的应用程序控制器中,它验证标头中的令牌,并在找到时返回用户记录。这是它的样子

def authenticate_user!
  # authenticate
  @current_login = Login.where(oauth2_token: bearer_token).first
  head 401 if @current_login.nil? # and return
  @current_user = @current_login.user
  head 401 if @current_user.nil? 
end
我使用此方法对控制器中的用户进行身份验证,如下所示

class AddressesController < ApplicationController
   before_action :authenticate_user!

   def some_action
      data = @current_user.some_associated_records
      render json: {data: data}
   end
end
然而,我仍然感到困惑,为什么原来的方法不起作用

如前所述()500的错误发生在您试图从
@current\u login
获取
用户时的步骤上,该步骤为
nil

head
方法只调用
render nothing:true
和提供的状态。 而且
render
不会中断任何执行链

根据以上注释,我建议将其改写如下:

def认证用户!
@当前登录=登录。查找方式(oauth2令牌:承载令牌)
@当前用户=@current\u登录名和.user
标题401如果@current_user.nil?
结束

500上的回溯是什么?我注意到“和返回”被注释掉了吗?另请参见当执行
@current\u user=@current\u login.user
时,@current\u login与current\u login500之间的区别。基本上,当令牌错误或不存在时,@current_login为nil,并引发NoMethodError user for nil类。当前登录和@current\u登录之间没有区别。那是个打字错误。更正了。根据我的理解,任何在动作之前渲染或导入的方法都应该停止其余动作的执行。因此,不应要求“和返回”。即使我使用它,结果也是一样的。
      private

      def authenticate_user!(*)
        @current_login = Login.where(oauth2_token: bearer_token).first!
        @current_user = @current_login.user
        rescue ActiveRecord::RecordNotFound
          head 401
      end