before_filter渲染或重定向。之后不调用create方法。

时间:2014-05-24 17:06:20

标签: ruby-on-rails

我在调用before_filter之前通过auth_token对我的API进行身份验证,然后用户才能建立友谊。我遇到的问题是成功调用了before_filter并且成功验证了用户,但是在运行before_filter之后它没有继续并调用create方法。

这是我POST到创建网址时返回的内容。

Filter chain halted as :require_auth rendered or redirected 

这是我的友谊控制器创建方法:

类FriendshipsController< ApplicationController中

  before_filter :require_auth

  def create
    friendID = params[:friend_id]
    userID = currently_logged_in.id
    unless userID == friendID or Friendship.exists?(userID, friendID)
      transaction do
        create(:user_id => userID, :friend_id => friendID, :status => 'pending')
        create(:user_id => friendID, :friend_id => userID, :status => 'requested')
      end
    end
  end

这是before_filter运行的应用程序控制器:require_auth

  def require_auth
    auth_token = request.headers["HTTP_AUTH_TOKEN"]
    @user = User.find_by_auth_token(auth_token)
    if @user.auth_token
      render :status => 200, :json => {:message => "Authorization accepted"}
    else
      render :status => 401, :json => {:error => "Requires authorization"}
      return false
    end
  end

任何想法都出错了?谢谢。

1 个答案:

答案 0 :(得分:0)

您的require_auth是您的问题,请将其更改为以下内容(您可以在railscasts剧集http://railscasts.com/episodes/352-securing-an-api中看到):

def require_auth

   authenticate_or_request_with_http_token do |token, options|
     user = User.find_by_auth_token(token)
   end

end

如果您不需要将require_auth放在ApplicationController中的受保护方法下,并且使用来自FriendshipsController

的before_filter调用它,则还需要将整个API移至应用控制器中