在用户创建友谊之前,我调用before_filter通过auth_token对我的API进行身份验证。我所遇到的问题是before_filter被成功调用,它是成功地对用户进行身份验证,但是在运行before_filter之后,它没有继续并调用create方法。
这是当我POST到create url时返回的结果。
Filter chain halted as :require_auth rendered or redirected
这是我的友情控制器创建方法:
classfriendshipscontroller <程序控制器>程序控制器>
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运行的应用控制器:
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
你知道怎么回事吗?谢谢。
您的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
还移动before_filter到应用程序控制器,如果你需要整个API,如果不把require_auth
在ApplicationController
的保护方法下,并从FriendshipsController
调用它