gpt4 book ai didi

ios - 轨道 API : Authenticate users from native mobile apps using username/password or facebook token

转载 作者:技术小花猫 更新时间:2023-10-29 10:40:04 26 4
gpt4 key购买 nike

因此,我已经绞尽脑汁好几天了,试图弄清楚如何将用户名/密码身份验证添加到我的 Rails 移动 API。

以下是我当前身份验证流程的简要概述:

enter image description here

  1. 用户在移动客户端上选择“使用 Facebook 登录”,客户端重定向到 Facebook 应用程序并请求 access_token

  2. 成功后,Facebook 使用访问 token 和客户端进行响应 重定向回我的应用。

  3. 客户端将访问 token 发送到我的 API

  4. 我的 API 使用 koala gem 检查访问 token 是否有效。

  5. 如果 token 有效,Facebook 会将用户数据发送到 API 创建新用户的地方。如果用户已经存在,我的 API 会向下发送用户数据。

我的 API 在步骤 4 中处理访问 token ,如下所示:

      def self.authenticate_user_from_facebook(fb_access_token)
user = User.new
graph = Koala::Facebook::API.new(fb_access_token)
profile = graph.get_object('me')


#user['fb_id'] = profile['id']
#user['fb_token'] = fb_access_token

# Generate user hash
uhash = Hash.new
uhash['provider'] = 'facebook'
uhash['uid'] = profile['id']

uhash['info'] = Hash.new
uhash['info']['nickname'] = profile['username']
uhash['info']['name'] = profile['name']
uhash['info']['email'] = profile['email']
uhash['info']['first_name'] = profile['first_name']
uhash['info']['last_name'] = profile['last_name']
uhash['info']['verified'] = profile['verified']

uhash['info']['urls'] = Hash.new
uhash['info']['urls']['Facebook'] = profile['link']

uhash['credentials'] = Hash.new
uhash['credentials']['token'] = fb_access_token

uhash['extra'] = Hash.new
uhash['extra']['raw_info'] = Hash.new



#Save the new data
user = User.apply_auth(uhash)
return user
end


def self.apply_auth(uhash)
User.where(:uid => uhash['uid'], :provider => uhash['provider']).first_or_create do |user|

user.provider = uhash['provider']
user.uid = uhash['uid']
user.nickname = uhash['info']['nickname']
user.email = uhash['info']['email']

user.name = uhash['info']['name']
user.first_name = uhash['info']['first_name']
user.last_name = uhash['info']['last_name']
end
end

创建用户后,他们可以使用他们的访问 token 向我的 API 发出请求,如下所示:

enter image description here

在第 2 步中,API 使用 koala验证用户访问 token 。这是通过将以下 before_filter 应用于所有 Controller 来完成的。

before_filter :current_user

在我的 application_helper.rb 中

def current_user
@current_user ||= User.authenticate_user_from_facebook(params[:access_token])
end

每次用户向我的 API 发出请求时,都会使用 koala gem 检查 token 是否有效,然后处理请求。

我现在要添加的是仅使用用户名和密码的身份验证。

我调查过的事情

我一直在引用 Railscast 235、209、250、82 并阅读 OAuth2。我对身份验证的工作原理有基本的了解,但我无法将其应用于我当前的身份验证流程。

设计 token 认证引用 Railscast 235、209 和这篇博文: http://matteomelani.wordpress.com/2011/10/17/authentication-for-mobile-devices/

我可以理解如何登录和验证使用用户名和密码登录的用户。但是,我对这将如何与我的 Facebook 登录流程相结合感到困惑。我不明白如何为已经拥有 Facebook 生成的访问 token 的用户创建 session 。

OAuth2让我的 API 成为 OAuth2 提供者似乎是个好方法,但重定向到浏览器似乎有点傻,而且我不知道是否可以从浏览器重定向回我的应用程序。

从头开始验证这是我正在考虑的选项,但我会重新发明轮子。

感谢阅读这篇长文!任何建议表示赞赏!

最佳答案

您可能需要查看 Warden .无论您使用 token 、密码还是 Facebook,Warden 都可以轻松设置和使用不同的身份验证策略。它是基于 Rack 的,所以它也可以在 Rails 之外工作,如果你想为 API 使用像 Grape 这样的东西,这是很好的。

这是 RailsCast on Warden . (需要专业订阅)

关于ios - 轨道 API : Authenticate users from native mobile apps using username/password or facebook token,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18995448/

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