被这个注册登录的问题困扰了几天了,手机移动应用没法直接使用 Rails 默认的 Cookiestore 的 session,听说可以用 basic auth 和 digest auth,但 authenticity token、session id、single access token、authentication token 几个东西之间的关系还是弄不太清楚。。要实现的功能很简单,注册、登录后可以实现类似发帖回帖的操作、不登录只可以浏览帖子。。求指导,该如何下手... 用户系统暂时是用 devise,orm 是 mongoid
可能上面没太说清楚,我是指通过 api、json 与服务器通信的 Android/iOS 本地应用,不是浏览器打开页面那种 web 应用。
思路:
首先划分清楚需要登录的和不需要登录的 API 请求
在 Basic Auth / OAuth / xAuth 中选择一种来实现用户认证
Demo 阶段可以先用 Basic Auth。正式使用时,如果是自己的客户端,推荐用 xAuth,因为对用户来说相对比较友好(OAuth 和 xAuth 的区别可以参考 Twitter 官方文档 http://twitter.com/docs/oauth/xauth
使用 OAuth 或 xAuth 作为认证方式时,网站的后端需要实现一个 OAuth Provider(注意跟 Consumer 的区别)。目前有 oauth-plugin 这个 gem 可用(不过实现 xAuth 需要自己写 patch)。
小广告:我最近用 oauth-plugin 的代码改造出一个小 gem,是专门用于实现 xAuth 的(不支持 OAuth),有兴趣的可以看看(文档暂缺):http://github.com/iwinux/oxit
http://www.slideshare.net/maximeguilbot/rails-as-ios-application-backend
这里有个 ppt,不知道有没有帮助
我记得 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 即可