以下简要介绍我目前的认证流程:
>用户在移动客户端,客户端上选择“用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令牌验证来自原生手机应用的用户所遇到的程序开发问题。
如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)