我正在使用Rails 5.1.1和yt gem 0.28
我使用官方宝石文档(链接在上面)。
这些文档Github
并尝试在SitePoint
上查看本教程如果您查看SP教程下面的评论 - 存在同样的问题,但是所有者已删除问题,因此我无法使用它。
宝石似乎工作正常。至少在我放置时:
video = Yt::Video.new id: 'BPNYv0vd78A'
在video_controllers.rb中然后询问video.description,它回答说明。所以我们在这里打勾。
我按照说法来配置YT:
Yt.configure do |config|
config.log_level = :debug
config.client_id = "[my_client_id].apps.googleusercontent.com"
config.client_secret = "[my_secret_key]"
config.api_key = '[my_api_key]'
end
我从google_oauth2复制了值,所以如果它没关系,那么它也一定没问题。
但是当我尝试使用涉及身份验证的任何事情时,会发生一些非常奇怪的事情。
FIRST PART - 访问令牌
根据手册,如果我有访问令牌,我可以:
account = Yt::Account.new access_token: 'ya29.[authenticating_user_token]'
account.email
以下是消息:
{
"error": {
"errors": [
{
"domain": "global",
"reason": "authError",
"message": "Invalid Credentials",
"locationType": "header",
"location": "Authorization"
}
],
"code": 401,
"message": "Invalid Credentials"
}
}
它还提供curl命令来模拟此操作:
curl -X GET -H "content-length: 0" -H "user-agent: Yt::Request (gzip)" -H "authorization: Bearer ya29.[authenticating_user_token]" -H "host: www.googleapis.com" "https://www.googleapis.com/oauth2/v2/userinfo?key=[my_api_key]"
authenticating_user_token与我从google auth json获得的内容相同,如user.auth_hash["credentials"]["token"]
my_api_key与Google Developers Console中的密钥相同。
当我通过byebug请求帐户的价值时,它给了我:
#<Yt::Models::Account:0x000000051473f0 @access_token="ya29.[authenticating_user_token]", @refresh_token=nil, @device_code=nil, @expires_at=nil, @authorization_code=nil, @redirect_uri=nil, @force=nil, @scopes=nil, @authentication=nil>
第一个没有回答的问题:“ 如果文档说我需要的只是access_token,为什么会使用api密钥? ”
SECOND PART refresh_token
实际上,在带有访问令牌的惨败之后,我认为可能是那个
"credentials"=>{"token"=>"ya29.[authenticating_user_token]",
"expires"=>true,
"expires_at"=>1518443279}
是神秘的刷新令牌!
它给了我相同的'无效凭据'
所以我修改了videos_controller.rb:
account = Yt::Account.new(refresh_token: user.auth_hash["credentials"]["token"],
expires_at: user.auth_hash["credentials"]["expires_at"],
expires: user.auth_hash["credentials"]["expires"])
这次与byebug我得到了帐户的价值:
#<Yt::Models::Account:0x00000007a6e5a8 @access_token=nil, @refresh_token="ya29.[you know_what]", @device_code=nil, @expires_at=1518443279, @authorization_code=nil, @redirect_uri=nil, @force=nil, @scopes=nil, @authentication=nil, @user_infos=#<Yt::Collections::UserInfos:0x00000007a305a0 @parent=#<Yt::Models::Account:0x00000007a6e5a8 ...>, @auth=#<Yt::Models::Account:0x00000007a6e5a8 ...>, @page_token=nil, @last_index=0, @items=[]>, @refreshed_authentications=#<Yt::Collections::Authentications:0x007ff0080054b0 @parent=#<Yt::Models::Account:0x00000007a6e5a8 ...>, @auth=#<Yt::Models::Account:0x00000007a6e5a8 ...>, @auth_params={:client_id=>"[my_client_id].apps.googleusercontent.com", :client_secret=>"[my_client_secret]", :refresh_token=>"[you_know_what]", :grant_type=>:refresh_token}, @page_token=nil, @last_index=1, @items=[], @where_params={}>>
请求account.email:
*** Yt::Errors::Unauthorized Exception: A request to YouTube API was sent without a valid authentication:
{}
You can retry the same request manually by running:
nil
第二个问题:“ 是否刷新令牌? ”
在YouTube帐户中,我有一个工作频道,因此无法理由。
我将不胜感激!如果您有任何与YouTube合作的应用,请分享指向Github的链接,以便我可以找出我的应用有什么问题!
答案 0 :(得分:1)
嗯,这就是尴尬 - 没有人试图帮助......
我仍然找到了错误的来源。 因此,来自身份验证[&#34;凭证&#34;] [&#34;令牌&#34;]的令牌是访问令牌。
我遇到的问题是因为我没有在config / initializers / device.rb中指定:scope 它应该是:
config.omniauth :google_oauth2, "[client_id_from_google_developers_console].apps.googleusercontent.com", "[key_from_google_developers_console]", scope: 'userinfo.profile, userinfo.email, youtube'
此外,我注意到令牌过期时出现错误,因此您应该执行类似开始救援的操作,以便及时更新用户的令牌。
答案 1 :(得分:-5)
btn-group
use this class for the button div like <div class="btn-group"></div>
and apply
btn-group button:hover {
background-color: #3e8e41;
}
.btn-group:after {
content: "";
clear: both;
display: table;
}
.btn-group button:not(:last-child) {
border-right: none;
}