0

我正在尝试一个基本的 API,但我处于一个十字路口,我不太确定如何进行。一般要点是,我向 /authenticate.json 提供了用户名和密码,并作为回报接收访问令牌。

如果我发出 GET 请求,我会得到我需要的信息。如果我尝试通过 POST 执行此操作,则会引发错误:

No route matches {:action=>"show", :controller=>"users", :id=>#<User access_token: "8922a3718bbe2a441a5ddddece3053a647941863b5ff2cad007...">}

路线.rb

match '/authenticate' => 'user_functions#authenticate', :via => [:post, :get]

控制器中的身份验证定义如下所示(我知道它很笨拙,我对 RoR / Ruby 不太熟悉)

def authenticate
if params['email'] and params['password']
  userSearch = User.find(:all, :conditions => ['email = ?', params[:email]], :limit => 1)
  if userSearch.count == 1 
    hash = Digest::SHA2.new << "#{userSearch.first.password_salt}#{params['password']}"
    if hash.hexdigest == userSearch.first.password_hash
      access_array = {"access_token" => userSearch.first.access_token}
      userAccessDetails = User.find(userSearch.first.id, :select => "access_token")
      respond_with userAccessDetails
    else
      respond_with 'Invalid credentials'
    end
  else
    respond_with 'Failed'
  end
else
  respond_with 'No credentials provided'
end

结尾

如果有人能够帮助或指出我正确的方向,我将不胜感激。谢谢。

4

1 回答 1

0

问题是您传递的用户对象没有 id 。在您的查询中,您只需选择访问令牌。

尝试也选择 id :

userAccessDetails = User.find(userSearch.first.id, :select => "access_token, id")

于 2013-03-10T21:45:06.113 回答