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

我有一个表单,在Rails中收集大量信息。 这种forms的一部分是新用户注册的字段。 由于Devise具有专门用于创build新用户的控制器/操作,因此我不知道如何以完全不同的操作以编程方式创build用户,并创build另一个logging。 我真的不能将用户registry单独分开。 我不知道如何创build一个用户,然后login用户,就像我可以很容易地在Authlogic中做的。

我已经使用了Authlogic和Devise,并认为每个人都有自己的优点和缺点。 有了Devise,我很喜欢用一个新项目“快点”,但是定制它似乎是一个痛苦。 Authlogic在Rails 3的时候遇到了很多问题,于是我转向了Devise。 我现在正在做一个新的项目,并从头开始。

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

您可以创build一个新的Devise用户,只需创build一个新的用户模型(请参阅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 

要login新创build的用户,请使用sign_in @user

在sign_in之前保存新创build的用户将失败,因为devise尚未填充用户对象的必填字段。 所以大卫的代码将适用于当前页面,但下一页将不会获得login的用户,因为用户只在会话设置后保存。 当我使用Mongoid时会发生这种情况,我不知道这是Mongodb特有的问题。

为了解决这个问题,我有一个非常不完美的解决scheme来调用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 

对于看到这个问题的新人…

一个简单的方法来做到这一点是在你的

 config/routes.rb 

你应该有一个如下所示的行:

 devise_for :users 

所以,你只需要添加一个devise将使用的path前缀:

 devise_for :users, :path_prefix =>'auth' 

希望能帮助到你!

Interesting Posts