服务端:django, oauth2app 调用端:oauth2. ruby version: 1.9.3
调用 oauth
接口时,要在 HTTP 头部加入 用 Base64 编码的认证头 (HTTP_AUTHENTICATION).
下面使用了 oauth2
gem 调用接口
auth_code = Base64.encode64("Base "+client_key+":"+client_secret)
client = client = OAuth2::Client.new(client_key, client_secret, :site => 'https://example.org')
token = client.password.get_token("username","password")
结果服务端一直报“no grant_type provided". 经过一轮前前后后,左左右有,里里外外的挖掘后.......
由于 Base64.encode64
编码出来的码竟然有折行
所以 django 在解析 HTTP 头部信息时,折行认为是无效的头部信息
在该行随后的所有头部和 POST 数据都被忽略了.!!!!!!
手动去掉换行符。
其实 oauth2
使用到的 faraday
gem 提供了各种认证方式的请求方法。
对于我用 password
的请求,它是这么解决的....
value = Base64.encode64([login, pass].join(':'))
value.gsub!("\n", '')
使用 Base64.strict_encode64
它会返回只有一行的 码......