我在调用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
任何想法都出错了?谢谢。
答案 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