这可能是一个奇怪的问题,但它出现在我最近一直在研究的项目中。Rails - Devise - 只有在用户对象已经存在的情况下才允许注册
我有一个叫做Student的Devise模型,带有一个独特的:sid参数。数据库中的Student表已经用Student对象填充,只有:设置了sid值。我需要让学生使用他们的:sid进行注册,设置Student对象的其他属性并进行必要的任何设计设置。
我应该如何设置注册?现在,我使用的是自定义的设计与这个RegistrationController下面的代码:
# inside controllers/students/registration_controller.rb
def create
if Student.exists?(:sid => params[:student][:sid].to_i)
@student = Student.find_by_sid(params[:student][:sid].to_i)
@student.update_attributes(params[:student])
if @student.save
set_flash_message :notice, :signed_up if is_navigational_format?
sign_in(Student, @student)
else
set_flash_message :notice, :sign_up_failed
redirect_to student_registration_path
end
else
set_flash_message :error, :sid_not_found
redirect_to new_student_registration_path
end
end
此代码仅仅更新现有的Student对象。
我不知道在其他地方存储有效的sid列表是否更有意义,或者如果我应该完全做其他事情来完成此项工作。
编辑: 至于我的主要问题,我想知道这是否是最好的方式去只允许注册从一个现有的用户对象池中选择使用任意值。
这听起来像你已经有覆盖设计控制器的解决方案?究竟是不是用这个工作?我的问题是关于安全问题 - 你如何向正确的sid注册?看起来你只需要通过向已知电子邮件地址发送代码来自动运行注册。 – vpsz
至于您关注有关安全,可悲的是我忽视了在这一点上,由于时间的限制。理想的情况是,学校的管理者将增加为每个学生和注册步骤就没有必要所有的信息,但我不知道这是否是合理的,要求管理员为每个学生设定甚至只是名称和SID(我假设高中的平均入学人数为800人左右)。 – Drew
至于我的主要问题,我不知道这是否是去只允许注册从正在使用的任意值选择的现有用户对象池的最佳方式。 – Drew