无法在会话中存储oauth令牌(rails)

时间:2011-01-24 03:58:07

标签: ruby-on-rails ruby-on-rails-3 oauth

K伙计们,所以我和dialybooth api以及OAauth合作,所以首先,我直接上架

 #first redirect the user to the authorize_url
  redirect_to dailybooth.authorize_url

 #on user return grab the code from the query string
 dailybooth.oauth_token(params[:code])

 #make request to the api
 pp dailybooth.get('/users.json')

问题是,它会不断重定向,因为它甚至没有检查是否设置了oauth_token,所以我做了这个;

unless dailybooth.oauth_token(params[:code])
 #first redirect the user to the authorize_url
 redirect_to dailybooth.authorize_url

 #on user return grab the code from the query string
 dailybooth.oauth_token(params[:code])
end


#make request to the api
pp dailybooth.get('/users.json')

现在,这将我发送到dailybooth授权页面,用户授权,然后被发送到我的页面,我获得了他们的帐户访问权限(返回了用户信息的数组),如果你刷新了令牌,那就是不存在了,用户不得不重新授权。

所以我尝试的是将oauth_token存储在会话中,

if session[:oauth_code]  #If session is set
  dailybooth.oauth_token(session[:oauth_code]) #sign in using cookie
else
  if params[:code]
    @oauth_token_ = params[:code]
    session[:oauth_code] = @oauth_token_
  else
      #first redirect the user to the authorize_url
      redirect_to dailybooth.authorize_url
  end
end



#make request to the api
@info = dailybooth.get('/users.json')

if @info['error']      
  if @info['error']['error_code'] 
    if @info['error']['error_code'] == 302 #if getting invalid token, request another token.
      session[:oauth_code] = nil
      #first redirect the user to the authorize_url
      redirect_to dailybooth.authorize_url

    end
  end
end

我仍然得到同样的东西,当我第一次访问我的网站时,我被重定向到授权页面,当局,然后我可以访问该帐户,但当我尝试回到索引,它说oauth_token无效。有什么帮助吗?

1 个答案:

答案 0 :(得分:0)

我说实话,我不是百分百肯定(并且DailyBooth的API文档是......缺少,至少可以说),但我相信你使用“令牌”(你正在获得的那个)从params[:code]并存储在@oauth_token_中)以获取访问令牌,然后存储访问令牌(例如,存储结果表单dailybooth.oauth_token(session[:oauth_code]),或者至少存储其中的一部分,如果它是一个对象/数组)。

unless session[:oauth_code] #unless the session is set
  if params[:code]
    session[:oauth_code] = dailybooth.oauth_token(params[:code])
  else
    #first redirect the user to the authorize_url
    redirect_to dailybooth.authorize_url
  end
end

#make request to the api
@info = dailybooth.get('/users.json')

if @info['error']      
  if @info['error']['error_code'] 
    if @info['error']['error_code'] == 302 #if getting invalid token, request another token.
      session[:oauth_code] = nil
      #first redirect the user to the authorize_url
      redirect_to dailybooth.authorize_url

    end
  end
end

我希望这能指出你正确的方向。