Skip to content

Instantly share code, notes, and snippets.

@kennx
Last active December 14, 2015 15:49
Show Gist options
  • Save kennx/5110654 to your computer and use it in GitHub Desktop.
Save kennx/5110654 to your computer and use it in GitHub Desktop.
为什么
class ApplicationCore < Sinatra::Base
enable :sessions
set :logging => true
set :public_folder => './public'
set :views => './views'
APPKEY = 'xxxx'
SECRET = 'xxxx'
SCOPES = 'douban_basic_common,community_basic_note'
def client
OAuth2::Client.new(APPKEY, SECRET,
{:site => 'https://api.douban.com',:authorize_url => 'https://www.douban.com/service/auth2/auth',:token_url => 'https://www.douban.com/service/auth2/token'})
end
get '/' do
erb :index
end
get '/oauth2/douban/connect' do
redirect client.auth_code.authorize_url(:redirect_uri => redirect_uri, :response_type => 'code' ,:scope => SCOPES)
end
get '/oauth2/douban/callback' do
client.auth_code.get_token(params[:code], :redirect_uri => redirect_uri)
end
def redirect_uri
uri = URI.parse(request.url)
uri.path = '/oauth2/douban/callback'
uri.query = nil
uri.to_s
end
run! if __FILE__ == $0
end

$ bundle show

Gems included by the bundle:
  * backports (3.0.3)
  * bundler (1.2.4)
  * daemons (1.1.9)
  * eventmachine (1.0.1)
  * faraday (0.8.6)
  * httpauth (0.2.0)
  * jwt (0.1.7)
  * multi_json (1.6.1)
  * multipart-post (1.2.0)
  * oauth2 (0.8.1)
  * rack (1.5.2)
  * rack-protection (1.4.0)
  * rack-test (0.6.2)
  * rake (10.0.3)
  * sinatra (1.3.5)
  * sinatra-contrib (1.3.2)
  * sinatra-reloader (1.0)
  * thin (1.5.0)
  * tilt (1.3.4)
require 'rubygems'
require 'bundler'
Bundler.require
require File.expand_path(File.dirname(__FILE__) + '/application_core')
run ApplicationCore
source 'http://ruby.taobao.org'
gem 'sinatra', :require => 'sinatra/base'
gem 'sinatra-reloader', :require => 'sinatra/reloader'
gem 'oauth2'
gem 'thin'
gem 'rake'
GEM
remote: http://ruby.taobao.org/
specs:
backports (3.0.3)
daemons (1.1.9)
eventmachine (1.0.1)
faraday (0.8.6)
multipart-post (~> 1.1)
httpauth (0.2.0)
jwt (0.1.7)
multi_json (>= 1.5)
multi_json (1.6.1)
multipart-post (1.2.0)
oauth2 (0.8.1)
faraday (~> 0.8)
httpauth (~> 0.1)
jwt (~> 0.1.4)
multi_json (~> 1.0)
rack (~> 1.2)
rack (1.5.2)
rack-protection (1.4.0)
rack
rack-test (0.6.2)
rack (>= 1.0)
rake (10.0.3)
sinatra (1.3.5)
rack (~> 1.4)
rack-protection (~> 1.3)
tilt (~> 1.3, >= 1.3.3)
sinatra-contrib (1.3.2)
backports (>= 2.0)
eventmachine
rack-protection
rack-test
sinatra (~> 1.3.0)
tilt (~> 1.3)
sinatra-reloader (1.0)
sinatra-contrib
thin (1.5.0)
daemons (>= 1.0.9)
eventmachine (>= 0.12.6)
rack (>= 1.0.0)
tilt (1.3.4)
PLATFORMS
ruby
DEPENDENCIES
oauth2
rake
sinatra
sinatra-reloader
thin
<a href="/oauth2/douban/connect">连接到豆瓣</a>
<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8" />
<title>OAuth2-Douban</title>
</head>
<body>
<%= yield %>
</body>
</html>
TypeError at /oauth2/douban/callback
can't convert nil into Integer
file: base.rb location: Integer line: 974
BACKTRACE
(expand)
JUMP TO: GET POST COOKIES ENV
GET
Variable  Value
code	
"93e5ca09333e7739"
POST
No POST data.
COOKIES
Variable	Value
rack.session	
"BAh7B0kiD3Nlc3Npb25faWQGOgZFRiJFMjA5MzFkZmQ2ZDVhMWI5NDdmNGE5\nZDY2MjEzNDRkNThlOGFlNGI0YTk3MzgxZTk5Y2M2YzA0MjU2NTkzOTBiOUki\nDXRyYWNraW5nBjsARnsISSIUSFRUUF9VU0VSX0FHRU5UBjsARiItNTllMTk4\nYzFhMzQxYmZmYzRjNDFlMDkyMzk3MmIyZWEzZDlkMzEwNUkiGUhUVFBfQUND\nRVBUX0VOQ09ESU5HBjsARiItZWQyYjNjYTkwYTRlNzIzNDAyMzY3YTFkMTdj\nOGIyODM5Mjg0MjM5OEkiGUhUVFBfQUNDRVBUX0xBTkdVQUdFBjsARiItY2E0\nYWVlMGU4MTIxNGFkZGM1ZmIxMjg3N2NmOWU1YzhiOGJlYjdkNg==\n--2fde90fe304717d628ec4a4433704396c6744a43"
Rack ENV
Variable	Value
GATEWAY_INTERFACE	
CGI/1.2
HTTP_ACCEPT	
text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8
HTTP_ACCEPT_CHARSET	
GBK,utf-8;q=0.7,*;q=0.3
HTTP_ACCEPT_ENCODING	
gzip,deflate,sdch
HTTP_ACCEPT_LANGUAGE	
zh-CN,zh;q=0.8
HTTP_CACHE_CONTROL	
max-age=0
HTTP_CONNECTION	
keep-alive
HTTP_COOKIE	
rack.session=BAh7B0kiD3Nlc3Npb25faWQGOgZFRiJFMjA5MzFkZmQ2ZDVhMWI5NDdmNGE5%0AZDY2MjEzNDRkNThlOGFlNGI0YTk3MzgxZTk5Y2M2YzA0MjU2NTkzOTBiOUki%0ADXRyYWNraW5nBjsARnsISSIUSFRUUF9VU0VSX0FHRU5UBjsARiItNTllMTk4%0AYzFhMzQxYmZmYzRjNDFlMDkyMzk3MmIyZWEzZDlkMzEwNUkiGUhUVFBfQUND%0ARVBUX0VOQ09ESU5HBjsARiItZWQyYjNjYTkwYTRlNzIzNDAyMzY3YTFkMTdj%0AOGIyODM5Mjg0MjM5OEkiGUhUVFBfQUNDRVBUX0xBTkdVQUdFBjsARiItY2E0%0AYWVlMGU4MTIxNGFkZGM1ZmIxMjg3N2NmOWU1YzhiOGJlYjdkNg%3D%3D%0A--2fde90fe304717d628ec4a4433704396c6744a43
HTTP_HOST	
www.example.com:4567
HTTP_USER_AGENT	
Mozilla/5.0 (Macintosh; Intel Mac OS X 10_7_5) AppleWebKit/537.22 (KHTML, like Gecko) Chrome/25.0.1364.155 Safari/537.22
HTTP_VERSION	
HTTP/1.1
PATH_INFO	
/oauth2/douban/callback
QUERY_STRING	
code=93e5ca09333e7739
REMOTE_ADDR	
127.0.0.1
REQUEST_METHOD	
GET
REQUEST_PATH	
/oauth2/douban/callback
REQUEST_URI	
/oauth2/douban/callback?code=93e5ca09333e7739
SCRIPT_NAME	
SERVER_NAME	
www.example.com
SERVER_PORT	
4567
SERVER_PROTOCOL	
HTTP/1.1
SERVER_SOFTWARE	
thin 1.5.0 codename Knife
async.callback	
#<Method: Thin::Connection#post_process>
async.close	
#<EventMachine::DefaultDeferrable:0x007fde44bbcb08>
rack.errors	
#<Object:0x007fde44a7bc08>
rack.input	
#<StringIO:0x007fde44bbd328>
rack.logger	
#<Logger:0x007fde44bbc978 @progname=nil, @level=1, @default_formatter=#<Logger::Formatter:0x007fde44bbc950 @datetime_format=nil>, @formatter=nil, @logdev=#<Logger::LogDevice:0x007fde44bbc900 @shift_size=nil, @shift_age=nil, @filename=nil, @dev=#<IO:<STDERR>>, @mutex=#<Logger::LogDevice::LogDeviceMutex:0x007fde44bbc8d8 @mon_owner=nil, @mon_count=0, @mon_mutex=#<Mutex:0x007fde44bbc888>>>>
rack.multiprocess	
false
rack.multithread	
false
rack.request.cookie_hash	
{"rack.session"=>"BAh7B0kiD3Nlc3Npb25faWQGOgZFRiJFMjA5MzFkZmQ2ZDVhMWI5NDdmNGE5\nZDY2MjEzNDRkNThlOGFlNGI0YTk3MzgxZTk5Y2M2YzA0MjU2NTkzOTBiOUki\nDXRyYWNraW5nBjsARnsISSIUSFRUUF9VU0VSX0FHRU5UBjsARiItNTllMTk4\nYzFhMzQxYmZmYzRjNDFlMDkyMzk3MmIyZWEzZDlkMzEwNUkiGUhUVFBfQUND\nRVBUX0VOQ09ESU5HBjsARiItZWQyYjNjYTkwYTRlNzIzNDAyMzY3YTFkMTdj\nOGIyODM5Mjg0MjM5OEkiGUhUVFBfQUNDRVBUX0xBTkdVQUdFBjsARiItY2E0\nYWVlMGU4MTIxNGFkZGM1ZmIxMjg3N2NmOWU1YzhiOGJlYjdkNg==\n--2fde90fe304717d628ec4a4433704396c6744a43"}
rack.request.cookie_string	
rack.session=BAh7B0kiD3Nlc3Npb25faWQGOgZFRiJFMjA5MzFkZmQ2ZDVhMWI5NDdmNGE5%0AZDY2MjEzNDRkNThlOGFlNGI0YTk3MzgxZTk5Y2M2YzA0MjU2NTkzOTBiOUki%0ADXRyYWNraW5nBjsARnsISSIUSFRUUF9VU0VSX0FHRU5UBjsARiItNTllMTk4%0AYzFhMzQxYmZmYzRjNDFlMDkyMzk3MmIyZWEzZDlkMzEwNUkiGUhUVFBfQUND%0ARVBUX0VOQ09ESU5HBjsARiItZWQyYjNjYTkwYTRlNzIzNDAyMzY3YTFkMTdj%0AOGIyODM5Mjg0MjM5OEkiGUhUVFBfQUNDRVBUX0xBTkdVQUdFBjsARiItY2E0%0AYWVlMGU4MTIxNGFkZGM1ZmIxMjg3N2NmOWU1YzhiOGJlYjdkNg%3D%3D%0A--2fde90fe304717d628ec4a4433704396c6744a43
rack.request.query_hash	
{"code"=>"93e5ca09333e7739"}
rack.request.query_string	
code=93e5ca09333e7739
rack.run_once	
false
rack.session	
{"session_id"=>"20931dfd6d5a1b947f4a9d6621344d58e8ae4b4a97381e99cc6c0425659390b9", "tracking"=>{"HTTP_USER_AGENT"=>"59e198c1a341bffc4c41e0923972b2ea3d9d3105", "HTTP_ACCEPT_ENCODING"=>"ed2b3ca90a4e723402367a1d17c8b28392842398", "HTTP_ACCEPT_LANGUAGE"=>"ca4aee0e81214addc5fb12877cf9e5c8b8beb7d6"}}
rack.session.options	
{:path=>"/", :domain=>nil, :expire_after=>nil, :secure=>false, :httponly=>true, :defer=>false, :renew=>false, :sidbits=>128, :secure_random=>SecureRandom, :secret=>"3c7bf7d92e9b6ac0698d167df06ce145bac7024aa232d12448cd8b4ab97161dcc21270fa8ce7ced3946ddc9da1f4f0b62999942ee6a3b4440a9405b7acef5bbc", :coder=>#<Rack::Session::Cookie::Base64::Marshal:0x007fde426a9fc8>}
rack.session.unpacked_cookie_data	
{"session_id"=>"20931dfd6d5a1b947f4a9d6621344d58e8ae4b4a97381e99cc6c0425659390b9", "tracking"=>{"HTTP_USER_AGENT"=>"59e198c1a341bffc4c41e0923972b2ea3d9d3105", "HTTP_ACCEPT_ENCODING"=>"ed2b3ca90a4e723402367a1d17c8b28392842398", "HTTP_ACCEPT_LANGUAGE"=>"ca4aee0e81214addc5fb12877cf9e5c8b8beb7d6"}}
rack.url_scheme	
http
rack.version	
[1, 0]
sinatra.commonlogger	
true
sinatra.error	
#<OAuth2::Error: {"access_token":"63003868fab4086c2900a93af01c1944","douban_user_name":"kennx9","douban_user_id":"63178469","expires_in":604800,"refresh_token":"25d4a7d2073ef46f717df77615bcdd4d"}>
You're seeing this error because you have enabled the show_exceptions setting.
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment