参考连接:
1. Gem包: Signet
2.OAuth2的一些介绍
3.API控制台
4.Google 的 OAuth 2.0
5.Google API 测试
理解 OAuth 2.0 流程
在使用Google API之前,
1.先注册一个Google 开发者账户
2.在Google Developer Console 新建一个Project
3.下面是Google的API列表,可以在这里选择要启用的API,例如我选择的是YouTube Data API
点击YouTube Data API 就会看到
4.在控制台左侧,点击凭证创建OAuth
点击创建新的用户端ID(在这里我创建的是网络应用程式,在这里已授权的JavaScript可以不做设置,主要是下面的授权导向URI要是一个可访问的域名,以便Google服务器可以将我们请求的参数返回.URI:http://xxx.xx.com/auth/oauth2callback (auth是controller,oauth2callback是auth中的方法)
创建好之后,会自动生成client_id和client_secrect
5.做完以上步骤之后就可以着手写代码了.(创建流程走一遍吧)
$ rails new youtube -d=mysql
$ cd youtube
在Gemfile中添加一些Gem包
gem 'signet'
gem 'rest-client'
gem 'unicorn'
$ bundle install
$ rails g controller auth
app/controllers/auth_controller.rb
def index
client = Signet::OAuth2::Client.new(
authorization_uri:
"https://accounts.google.com/o/oauth2/auth?",
client_id: "xxxxxxxxxx",
client_secret: "xxxxxxxxx",
redirect_uri: "http://xxx.xx.com/auth/oauth2callback",
scope: "https://www.googleapis.com/auth/youtube")
options = {response_type: "code",approval_prompt: :force,access_type: :offline}
@res = client.authorization_uri(options).to_s (生成授权链接)
end
def oauth2callback
logger.info "***********************************"
logger.info params[:code](在授权之后,google服务器返回的code)
client = Signet::OAuth2::Client.new(
client_id: "xxxxxxx",
client_secret: "xxxxxxxxxxx",
token_credential_uri: "https://accounts.google.com/o/oauth2/token",
redirect_uri: "http://xxx.xx.com/auth/oauth2callback")
client.code=(params[:code])
logger.info res = client.fetch_access_token!(获取access_token)
logger.info "***********************************"
end
end
返回的参数类似与
{
"access_token":"1/fFAGRNJru1FTz70BzhT3Zg",
"expires_in":3920,
"token_type":"Bearer",
"refresh_token":"1/6BMfW9j53gdGImsixUH6kU5RsR4zwI9lUVX-tqf8JXQ"
}
将rails项目上传到服务器并启动,可在log里查看是否获取到access_token