gpt4 book ai didi

ios - 从 iOS Rails 3 服务器和 Omniauth 验证用户

转载 作者:可可西里 更新时间:2023-11-01 04:31:14 24 4
gpt4 key购买 nike

我们的 Rails 3 应用程序使用 facebook-omniauth,允许用户使用 facebook 进行身份验证。

尽可能多地使用基于 Web 的身份验证系统会很好,所以我尝试按照对 this SO question 的答案(未被否决的那个)进行操作但我无法让它工作。

答案的要点是:

omniauth-facebook will handle requests to the callback endpoint with an access_token parameter without any trouble. Easy :)

因此,为了对此进行测试,我在浏览器中发出以下请求:

/users/auth/facebook_api/callback?access_token=BAAB...

但是在我的服务器日志中,我看到:

(facebook) Callback phase initiated.
(facebook) Authentication failure! invalid_credentials: OAuth2::Error, :
{"error":{"message":"Missing authorization code","type":"OAuthException","code":1}}

我不知道我做错了什么。我试图通过浏览器执行此操作以测试是否搞砸了?关于如何为我的 iOS 应用重用基于 www 的身份验证逻辑还有其他想法吗?

更新:我不确定,但我正在关注 this guide为了有多个 facebook omniauth 策略,一个用于 www,另一个用于移动。

最佳答案

我从来没有找到符合我最初要求的解决方案,但我是这样解决的:获取您在 iPhone 上获得的访问 token 并将其发送到您的服务器并手动执行登录。

def facebook_login
graph = Koala::Facebook::API.new(params[:user][:fb_access_token])
profile = graph.get_object('me')
omniauth = build_omniauth_hash(profile)

@user = User.find_or_create_for_facebook_oauth(omniauth)
end

在 www 上我们已经有一个名为 find_or_create_for_facebook_oauth 的方法,它从 Omniauth 获取结果并找到用户或创建一个新用户。为了将该方法用于移动设备,我必须手动构建一个类似的结构,以便将其作为参数传递。

def build_omniauth_hash(profile)
struct = OpenStruct.new
struct.uid = profile['id']
struct.info = OpenStruct.new
struct.info.email = profile['email']
struct.info.image = "http://graph.facebook.com/#{profile['id']}/picture?type=square"
struct.info.first_name = profile['first_name']
struct.info.last_name = profile['last_name']
struct.info.bio = profile['bio']
struct.info.hometown = profile['hometown']['name'] if profile['hometown']
struct.info.location = profile['location']['name'] if profile['location']
struct
end

关于ios - 从 iOS Rails 3 服务器和 Omniauth 验证用户,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12826679/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com