ios – Rails API:使用用户名密码或Facebook令牌验证来自原生手机应用的用户

ios – Rails API:使用用户名密码或Facebook令牌验证来自原生手机应用的用户,第1张

概述所以我已经把我的头发拉了几天,现在试图找出如何添加用户名/密码认证到我的rails mobile API. 以下简要介绍我目前的认证流程: >用户在移动客户端,客户端上选择“用Facebook登录” 重定向到Facebook应用程序并请求access_token >成功后,Facebook使用访问令牌和客户端进行回复     重定向到我的应用程序 >客户端将访问令牌发送到我的API >我的API使 所以我已经把我的头发拉了几天,现在试图找出如何添加用户名/密码认证到我的rails mobile API.

以下简要介绍我目前的认证流程:

>用户在移动客户端,客户端上选择“用Facebook登录”
重定向到Facebook应用程序并请求access_token
>成功后,Facebook使用访问令牌和客户端进行回复
重定向到我的应用程序
>客户端将访问令牌发送到我的API
>我的API使用koala gem来检查访问令牌是否有效.
>如果令牌有效,Facebook将用户数据发送到API
创建新用户的位置.如果用户已经存在,我的API会发送用户数据.

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

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

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

在步骤2中,API正在使用koala来验证用户访问令牌.这通过将以下before_filter应用于所有控制器来完成.

before_filter :current_user

在我的application_helper.rb中

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

每当用户向我的API发出请求时,使用koala gem来检查令牌是否有效,然后处理该请求.

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

我研究的事情

我一直在不断地提到Railscast 235,209,250,82,并在OAuth2上阅读.我对认证工作原理有一个基本的了解,但是我无法将其应用到我目前的认证流程中.

设计令牌认证
参考Railscast 235,209和这个博文:
http://matteomelani.wordpress.com/2011/10/17/authentication-for-mobile-devices/

我可以了解如何登录并验证用户名和密码登录的用户.不过我很困惑,如何将与我的Facebook登录流网络.我不明白如何为已经拥有Facebook生成的访问令牌的用户创建一个会话.

的OAuth2
使我的API成为一个OAuth2提供商似乎是一个很好的方法,但它似乎有点愚蠢的重定向到浏览器,我不知道是否可能从浏览器重定向到我的应用程序.

认证从头开始
这是我正在考虑的选择,但我会重新发明.

感谢您阅读这篇文章!任何建议是赞赏!

解决方法 您可能需要查看 Warden.监护人可以轻松设置和使用不同的认证策略,无论您是使用令牌,密码还是Facebook.它是基于Rack的,所以它也可以在Rails之外工作,这是很好的,如果你想要使用像Grape这样的API.

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

总结

以上是内存溢出为你收集整理的ios – Rails API:使用用户名/密码或Facebook令牌验证来自原生手机应用的用户全部内容,希望文章能够帮你解决ios – Rails API:使用用户名/密码或Facebook令牌验证来自原生手机应用的用户所遇到的程序开发问题。

如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。

欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/web/1109284.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-05-29
下一篇 2022-05-29

发表评论

登录后才能评论

评论列表(0条)

保存