Rails Rails Backend 的 Android/iOS 应用如何做注册登录?

paranoyang · 2011年12月11日 · 最后由 ppplinve 回复于 2013年08月20日 · 8691 次阅读

被这个注册登录的问题困扰了几天了,手机移动应用没法直接使用 Rails 默认的 Cookiestore 的 session, 听说可以用 basic auth 和 digest auth, 但 authenticity token、 session id、 single access token、authentication token 几个东西之间的关系还是弄不太清楚。。要实现的功能很简单,注册、登录后可以实现类似发帖回帖的操作、不登录只可以浏览帖子。。 求指导,该如何下手... 用户系统暂时是用 devise,orm 是 mongoid

可能上面没太说清楚,我是指通过 api、json 与服务器通信的 Android/iOS 本地应用,不是浏览器打开页面那种 web 应用。

什么年代的手机浏览器啊不支持 Cookiestore……

#1 楼 @Rei 是呀 好奇怪 标题不是说 android 和 ios 吗

#1 楼 @Rei 不是做手机浏览器的软件,是手机本地应用

#2 楼 @hooopo 抱歉刚才没有说清楚,我修改了一下

思路:

  1. 首先划分清楚需要登录的和不需要登录的 API 请求

  2. 在 Basic Auth / OAuth / xAuth 中选择一种来实现用户认证

  3. Demo 阶段可以先用 Basic Auth。正式使用时,如果是自己的客户端,推荐用 xAuth,因为对用户来说相对比较友好(OAuth 和 xAuth 的区别可以参考 Twitter 官方文档 http://twitter.com/docs/oauth/xauth

  4. 使用 OAuth 或 xAuth 作为认证方式时,网站的后端需要实现一个 OAuth Provider(注意跟 Consumer 的区别)。目前有 oauth-plugin 这个 gem 可用(不过实现 xAuth 需要自己写 patch)。

小广告:我最近用 oauth-plugin 的代码改造出一个小 gem,是专门用于实现 xAuth 的(不支持 OAuth),有兴趣的可以看看(文档暂缺):http://github.com/iwinux/oxit

#5 楼 @iwinux thx!! 我对 basic auth 的过程还是有些不理解,认证后是不是会返回给用户一个 access token? 这个是要手动来实现生成还是使用默认生成的 session id? 客户端是在 set-Cookies 里面获取这东西吗?... 需要登录的 api 是不是每次调用都要附上认证过的 access token 呢?

#6 楼 @suupic 多谢!好巧... 我昨天也在微薄分享了这个 ppt.... 刚又看到一句 sending cookies with every request.. 莫非我需要在客户端处理 cookies?我本来想着把 session 改存在服务器端,然后客户端只需要处理 token..

#7 楼 @paranoyang Basic Auth 的话,是每次请求的时候都要发送用户名和密码……

#9 楼 @iwinux 擦... 这些认证的详解在哪里能看到呢? ... 我都是几本书乱翻,搜不到什么好资源

总算搞明白了...

curl --basic -u [email protected] 0.0.0.0:3000/xxxxx

@paranoyang 自己的 应用 可以带个 key 验证, 最简单了

我记得 devise 的用户表的密码 hash 用的是 bcypt,那么密码 hash 的前 6 位好像是个 salt。 可以把这个 salt 取出来,再另外加一个自行设定的 salt,两个一起 digest 一下,发给客户端,客户端以后每次请求都携带这个 key,服务器验证。 其实跟 cookies 一样哈,仅供参考。

#12 楼 @wxianfeng 你说的这个 key 是附加上请求的 url 上吗?那样的话要是被其它的人知道了,岂不是麻烦了?不太明白你说的。 @clc3123

。。。lz 用的是 devise 不,启用 authentication token 之后,直接 post 登录信息到/users/sign_in.json 即可登录,然后把返回的 auth_token 存在 iOS 上,下次访问带上 token 即可

#15 楼 @feipinghuang 按照你的这个方法我这边不行哈,说是无法验证 csrf token

18 楼 已删除
需要 登录 后方可回复, 如果你还没有账号请 注册新账号