使用cookie在Rails中实现简单的注册/登录系统

时间:2011-07-26 22:18:48

标签: ruby-on-rails authentication rest architecture

我是Rails的新手,我正在尝试实现一个非常基本的用户身份验证系统。我现在的主要问题是,我不知道什么是好的设计。

我现在拥有的

我的Rails应用不是网站;它是一个与iPhone应用程序通信的Web服务。所有通信都是JSON。

当用户注册时,应用会向/users.json发送POST请求,其中namepassword为HTTP正文中的JSON。然后Rails将用户ID保存在cookie中:

cookies.signed[:user_id] = @user.id

当用户注销时,应用会向/logout.json发送POST请求。 Rails从cookie中获取用户ID,更新数据库并删除co​​okie。

稍后,当用户想再次登录时,应用会向/login.json发送POST请求,其中namepassword为HTTP中的JSON身体。 Rails再次设置cookie。

我的问题

  1. 这个设计是RESTful吗?因为登录和注销不是资源。
  2. 使用这样的cookie是否安全?我打算使用SSL。
  3. 有更好的方法吗?

3 个答案:

答案 0 :(得分:2)

这是一个非常基本的方法

更加RESTful的方式:

使用create和destroy操作创建一个名为sessions的控制器。将登录/注销丢掉,开始考虑会话。登录只是一个用户名/密码组合。当您登录时创建/启动会话,当您注销时会破坏会话。登录不受影响。

您应该使用session [:user_id]

,而不是使用cookies.signed [:user_id]

SSL是一个很大的优势,因为密码无法通过网络嗅探。

还有很多开箱即用的身份验证系统。

我最喜欢的是Devise:

https://github.com/plataformatec/devise

http://asciicasts.com/episodes/209-introducing-devise

http://railscasts.com/episodes/209-introducing-devise

答案 1 :(得分:1)

有一个很好的截屏视频ryan bates从头开始进行身份验证

http://railscasts.com/episodes/250-authentication-from-scratch

答案 2 :(得分:0)

  1. 不,因为你说的原因。
  2. 不,您需要传递第二个参数来加密用户的ID。
  3. 嗯,你可以use a gem,有一些关于。
  4. 如果您确实想自己编写代码,那么我建议您查看教程。 railstutorial.org的那个非常好。

    基本思想是创建一个带有加密密码的用户模型,该密码使用由当前时间和密码组成的salt。然后创建会话控制器并使其成为RESTful,但使用cookie而不是其他资源。确保用盐加密cookie:

    cookies.permanent.signed[:remember_token] = [user.id, user.salt]