我是Rails的新手,我正在尝试实现一个非常基本的用户身份验证系统。我现在的主要问题是,我不知道什么是好的设计。
我现在拥有的
我的Rails应用不是网站;它是一个与iPhone应用程序通信的Web服务。所有通信都是JSON。
当用户注册时,应用会向/users.json
发送POST请求,其中name
和password
为HTTP正文中的JSON。然后Rails将用户ID保存在cookie中:
cookies.signed[:user_id] = @user.id
当用户注销时,应用会向/logout.json
发送POST请求。 Rails从cookie中获取用户ID,更新数据库并删除cookie。
稍后,当用户想再次登录时,应用会向/login.json
发送POST请求,其中name
和password
为HTTP中的JSON身体。 Rails再次设置cookie。
我的问题
答案 0 :(得分:2)
这是一个非常基本的方法
更加RESTful的方式:
使用create和destroy操作创建一个名为sessions的控制器。将登录/注销丢掉,开始考虑会话。登录只是一个用户名/密码组合。当您登录时创建/启动会话,当您注销时会破坏会话。登录不受影响。
您应该使用session [:user_id]
,而不是使用cookies.signed [:user_id]SSL是一个很大的优势,因为密码无法通过网络嗅探。
还有很多开箱即用的身份验证系统。
我最喜欢的是Devise:
https://github.com/plataformatec/devise
答案 1 :(得分:1)
有一个很好的截屏视频ryan bates从头开始进行身份验证
http://railscasts.com/episodes/250-authentication-from-scratch
答案 2 :(得分:0)
如果您确实想自己编写代码,那么我建议您查看教程。 railstutorial.org的那个非常好。
基本思想是创建一个带有加密密码的用户模型,该密码使用由当前时间和密码组成的salt。然后创建会话控制器并使其成为RESTful,但使用cookie而不是其他资源。确保用盐加密cookie:
cookies.permanent.signed[:remember_token] = [user.id, user.salt]