如何在Devise中手动创建新的用户和用户会话?

Sea*_*man 47 ruby-on-rails authlogic devise ruby-on-rails-3

我有一个表单,我在Rails中收集了大量信息.此表单的一部分是要注册的新用户的字段.由于Devise具有专门用于创建新用户的控制器/操作,因此我不知道如何以完全不同的操作以编程方式创建用户,同时创建另一个记录.我真的不能将用户注册表分开.我无法弄清楚如何创建用户,然后记录用户,就像我在Authlogic中可以轻松做的那样.

我使用了Authlogic和Devise,并认为每个都有自己的优点和缺点.有了Devise,我喜欢用新项目"开始"的速度有多快,但定制它似乎很痛苦.一段时间后,Authlogic对Rails 3有很多问题,我转而使用Devise.我现在正在开发一个新项目并从头开始.

所以我认为这个问题有2个可能的答案:(a)如何在Devise中做到这一点,或者(b)为什么我应该用Rails 3切换到Authlogic.

Dav*_*ulc 84

您可以通过创建新的用户模型来创建新的Devise用户(请参阅https://github.com/plataformatec/devise/wiki/How-To:-Manage-users-through-a-CRUD-interface)

@user = User.new(:email => 'test@example.com', :password => 'password', :password_confirmation => 'password')
@user.save
Run Code Online (Sandbox Code Playgroud)

要登录新创建的用户,请使用 sign_in @user

  • 您可以在https://github.com/plataformatec/devise自述文件的"测试帮助程序"部分中看到它.更具体地说,您可以在此处查看文档:http://rubydoc.info/github/plataformatec/devise/主/帧 (3认同)

van*_*p82 9

在sign_in之前保存新创建的用户将失败,因为设计尚未填充User对象的必填字段.因此,David的代码将适用于当前页面,但下一页将无法获得已登录的用户,因为用户仅在设置会话后保存.当我使用Mongoid时会发生这种情况,我不知道它是否是Mongodb特有的问题.

为了解决这个问题,我有一个非常不完美的解决方案,可以两次调用sign_in.第一个sign_in将保存用户.它只是有效但人们可以肯定地改进它.

@user = User.new(:email => 'test@example.com',
                 :password => 'password',
                 :password_confirmation => 'password')
# This will save the user in db with fields for devise
sign_in @user
# :bypass is set to ignore devise related callbacks and only save the
# user into session.
sign_in @user, :bypass => true 
Run Code Online (Sandbox Code Playgroud)

  • 如果您在调用sign_in之前明确保存用户,请问是否仍然会出现问题?如果这不起作用,是否在保存后但在sign_in之前添加调用以重新加载用户? (2认同)