如果用户先前已批准访问该应用程序并提供了所有权限,则facebook OAuth对话框会重定向回提供的redirect_uri,而不会提示用户...
我想覆盖该行为,并强制对话框再次询问用户权限...
不知道是否可以做到这一点,因为文档没有提供关于这样做是否可行的帮助。
我试图在我的iframe应用程序中显示一个Facebook UI对话框,以便我可以获得我们目前没有的扩展权限.使用旧的SDK很容易实现这一点.但是,使用新库,我得到一个模态显示的Facebook iframe对话框,但永远不会停止加载.将方法更改为"页面"意味着我得到一个弹出窗口,只显示"发生错误".我的代码如下:
var attachment = {
display: 'iframe',
method: 'oauth',
scope: perms,
access_token: '<?php echo $this->accessToken; ?>' // this is definitely valid access token
};
FB.ui(attachment, function(response){
pr(response);
});
Run Code Online (Sandbox Code Playgroud)
我希望这可以使用新的SDK,文档肯定声明iframe是一个有效的显示参数.
提前致谢.
G
我在http://qotr.net上有一个域,我正在尝试将其设置为应用程序,以便可以使用 OAuth。它是在几周前建立的,我们刚刚在我们的应用程序上实现了 OAuth 钩子,当时 Facebook 开始给我们错误。
现在,当我进入设置页面并编辑任何内容时,我得到:
错误应用域:qotr.net 不是有效域。站点 URL 不是有效的 URL。
我有:qotr.net对于应用程序域和http://qotr.net站点 url。
http://developers.facebook.com/tools/debug/og/object?q=http%3A%2F%2Fqotr.net
告诉我它无法解析 qotr.net。该站点显然已启动并可使用,并且 Google OAuth 有效。
我在网上找不到任何关于为什么它可能无法正确解析的信息;有任何想法吗?
由于Facebook正在删除offline_access权限,我想继续迁移我们的网站以使用新系统.
我在Facebook的网站上找到了这个文件:https: //developers.facebook.com/roadmap/offline-access-removal
但是,当我使用服务器端身份验证处理某人时,我收到此响应:
access_token => BLAHBLAHBLAHdontusemytokensilly
expires => 4992
Run Code Online (Sandbox Code Playgroud)
当我尝试使用访问点(在该文档上)来扩展访问令牌超过几个小时时,我得到了回复:
access_token => BLAHBLAHBLAHdontusemytokensilly
expires => 4990
Run Code Online (Sandbox Code Playgroud)
根据该文档,服务器端OAuth应该获得一个持续60天的令牌,我不明白为什么我没有得到它.
我真的不想每2小时通过OAuth重定向发送我们的用户.
有任何想法吗?谢谢!
UPDATE
根据要求,这是我正在采取的流程(在浏览器中):
首先,我在这里重定向用户:
这会将用户重定向到此处:
http://localhost/user-social/facebook/redirect?code=BLAHBLAHBLAHsomeawesomecode#_=_
Run Code Online (Sandbox Code Playgroud)
然后我请求了一个访问令牌,如下所示:
我从Facebook收到这个休息:
access_token=BLAHBLAHBLAHdontusemytokensilly&expires=4057
Run Code Online (Sandbox Code Playgroud)
这显然是一个短命的令牌.根据Facebook文档(上文),我应该收到一个长期存在的令牌(因为我使用的是服务器端OAuth).
但是,由于它是短暂的,我试图将它换成一个长期存在的令牌:
这是Facebook返回的内容:
access_token=BLAHBLAHBLAHdontusemytokensilly&expires=3967
Run Code Online (Sandbox Code Playgroud)
两个请求中都返回相同的access_token.
更新2
我将上面的访问令牌放入Facebook调试器中,这就是它返回的内容:
App ID:
BLAHBLAH
User ID:
211800900 : David Barratt
Issued:
Unknown
Expires:
1347303600 (in 40 minutes)
Valid: True
Origin: Web
Scopes: create_event create_note email friends_actions.music friends_actions.news friends_actions.video friends_likes friends_subscriptions manage_pages photo_upload publish_actions publish_stream rsvp_event share_item status_update user_about_me …Run Code Online (Sandbox Code Playgroud) 我仍然无法在Google App Engine上使用OAuth 2 Facebook查找任何类型的教程来验证本机iOS应用程序.我意识到我可能需要在GAE上使用代理(例如:使用来自Iphone Native Client的Google App Engine进行身份验证)来创建与facebook的会话,但是使用本机facebook UI进行SSO的最简洁方法是什么?
我想我会使用Facebook ios Auth教程的内容:http://developers.facebook.com/docs/tutorials/ios-sdk-tutorial/authenticate/
但是,我如何将会话提供给我的GAE服务器,并在会话客户端设备上缓存会话,以便它可以验证对我的服务器的https请求?我基本上想在GAE上使用simple-auth,让我的iOS应用程序就像本机(web)客户端(但不使用UIWebViews).有没有一个简单的方法来做到这一点?
顺便说一下,我在Google App Engine上使用python.我发现这是针对Java的,但老实说我不确切知道它的作用,因为文档尚未编写http://www.lean-engine.com/index.html
类似的悬而未决的问题:https://stackoverflow.com/questions/14878727/oauth-from-native-ios-app-with-oauth-from-facebook
编辑:我基本上想要一个类似于Draw Something和其他Zynga游戏的登录,允许用户简单地使用他们的本机Facebook/iOS6身份验证来验证对我的服务器的API调用.
EDIT2:找到这篇内容丰富的帖子,但仍然没有关于如何做的教程在iOS应用程序中设计Facebook身份验证,该应用程序也访问安全的Web服务
google-app-engine single-sign-on ios oauth-2.0 facebook-oauth
我们的应用程序工作正常但是,当我们试图在画布外部(直接在http://example.herokuapp.com)上输入我们的Facebook应用程序时,我们没有任何改变,在提供我们的FB用户和密码后,我们是陷入无限循环,其中URL上的"状态"参数不断变化:
https://example.herokuapp.com/?state=05b40a2e4d2c1f7b4c13a026a069acc3&code=AQCql520w_5dJjHnJlojMvzSCukAMrRsjqCipdkDP3N4h4zUQH72Q79oH2EMd_tQDv-fwKTJr2LG-azBUt37bUX06r3t9QHBwb27XBQyxmgdGdR_A1flZBY_oP-L0UEhjSu1FE8v2blILC8EuEWLNikgtkmaWWwy9e93KQX00wiVj422pzHuzn-m9_jZEUiKsf3dQIwCE3V7UBHMZCD9gS0#_=_
Run Code Online (Sandbox Code Playgroud)
在FB画布里面,它工作得很好.我们有一个双应用程序(测试环境)在画布内外工作正常(相同的代码和配置).
有任何想法吗?
谢谢
我不能为我的生活让我的Facebook画布应用程序显示.Chrome控制台显示此错误,iframe中没有任何内容显示 - 它是空白的:
Refused to display 'http://mysite.dev/' in a frame because it set 'X-Frame-Options' to 'SAMEORIGIN'.
我正在使用Rails 4.0.0.rc1和omniauth-facebook 1.4.1,以Facebook身份验证上的Railscast作为指南.我没有使用任何Javascript代码,因为它是可选的,理想情况下应该只能在Facebook中访问应用程序.
的routes.rb
match 'auth/:provider/callback', to: 'sessions#create', via: [:get, :post]
match 'auth/failure', to: redirect('/'), via: [:get, :post]
match 'signout', to: 'sessions#destroy', as: 'signout', via: [:get, :post]
Run Code Online (Sandbox Code Playgroud)
sessions_controller.rb
class SessionsController < ApplicationController
def create
user = User.from_omniauth(env["omniauth.auth"])
session[:user_id] = user.id
redirect_to root_url
end
def destroy
session[:user_id] = nil
redirect_to root_url
end
Run Code Online (Sandbox Code Playgroud)
application_controller.rb
我不得不对此发表评论,因为我不断收到InvalidAuthenticityToken错误,这些错误让我失去了我一天的另一半.在这里再说一点.
# …Run Code Online (Sandbox Code Playgroud) Web应用程序支持使用JavaScript SDK通过Facebook登录.
Facebook身份验证发生在客户端.成功后,将调用FB.getLoginStatus(),并将身份验证令牌和用户ID发送到服务器.
Web应用程序将Facebook用户ID存储在其数据库中.
服务器如何知道用户已成功登录并且身份验证令牌和用户ID尚未伪造客户端?有没有办法在不向Facebook服务器发送请求的情况下执行此验证服务器端?
facebook facebook-graph-api facebook-javascript-sdk facebook-oauth facebook-login
我正在进行狂欢3.0安装(ROR)并尝试使用facebook oauth进行身份验证,但是在成功的oauth之后发回的字段,不包含对我们的应用程序至关重要的电子邮件.这是从facebook成功验证返回的.
#<OmniAuth::AuthHash credentials=#<OmniAuth::AuthHash expires=true expires_at=1442435073 token="CAAJa3dyBtY4BAJ2ZB3vrenNOFJKSMtvxYO09ZCJtEsmKNBs90q9nmUF4LIBr06xCizEAR3lwht3BwycLkVFdjlvkS1AUGpYODQHu25K0uO8XLDDPkTO0E9oPdIILsbTTOuIT7qcl8nJ6501z0dCXEi9hVNwPYqZBbGqiEhyoLyVgCNnDWdPRLBRF5xSovJdhjjCf6XC8ulJ4NnKBfM8"> extra=#<OmniAuth::AuthHash raw_info=#<OmniAuth::AuthHash id="101230990227589" name="David Alajbbjfdjgij Bowersstein">> info=#<OmniAuth::AuthHash::InfoHash image="http://graph.facebook.com/101230990227589/picture" name="David Alajbbjfdjgij Bowersstein"> provider="facebook" uid="101230990227589"
Run Code Online (Sandbox Code Playgroud)
正如你所看到的,我得到的只是用户名和他们的ID.在我的Facebook应用程序上是否有一些设置需要检查以便收回电子邮件?或者我有不同的方式做Oauth?我只是使用spree_social gem,它在内部完成这一切所以我实际上并没有编写任何代码.
这是代码.复制出宝石,我只是添加了日志行,看看从Facebook回来的东西.
def #{provider}
authentication = Spree::UserAuthentication.find_by_provider_and_uid(auth_hash['provider'], auth_hash['uid'])
if authentication.present? and authentication.try(:user).present?
flash[:notice] = I18n.t('devise.omniauth_callbacks.success', kind: auth_hash['provider'])
sign_in_and_redirect :spree_user, authentication.user
elsif spree_current_user
spree_current_user.apply_omniauth(auth_hash)
spree_current_user.save!
flash[:notice] = I18n.t('devise.sessions.signed_in')
redirect_back_or_default(account_url)
else
user = Spree::User.find_by_email(auth_hash['info']['email']) || Spree::User.new
user.apply_omniauth(auth_hash)
Rails.logger.debug("THE AUTO HASH")
Rails.logger.debug(auth_hash.inspect)
if user.save
flash[:notice] = I18n.t('devise.omniauth_callbacks.success', kind: auth_hash['provider'])
sign_in_and_redirect :spree_user, user
else
session[:omniauth] = auth_hash.except('extra')
flash[:notice] = Spree.t(:one_more_step, kind: auth_hash['provider'].capitalize)
redirect_to …Run Code Online (Sandbox Code Playgroud) 我添加了许多URI,包括域名,本地主机和IP地址“有效的OAuth重定向URI”。他们至今仍在工作。但是现在我添加了另一个IP地址。总是显示错误消息“不允许使用新的HTTP重定向URI”。甚至我添加了域名,如果没有https也不允许。是因为自2018年3月以来已更改了“对重定向URI使用严格模式”选项?以及如何使“有效的OAuth重定向URI”允许IP地址?