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

我有一个表格,可以在Rails中收集很多信息。 该表格的一部分是供新用户注册的字段。 由于Devise具有专门用于创建新用户的控制器/动作,因此我不知道如何以编程方式在完全不同的动作中创建用户,该动作还会创建另一条记录。 我真的不能分开用户注册表。 我无法弄清楚如何创建用户,然后再登录用户,就像我在Authlogic中可以轻松做到的那样。

我同时使用了Authlogic和Devise,并认为它们各有优缺点。 使用Devise,我喜欢“开始”一个新项目有多快,但是自定义它似乎很痛苦。 不久前,Authlogic在Rails 3上遇到了很多问题,以至于我切换到Devise。 我现在正在研究一个新项目,并从头开始。

因此,我认为这个问题有2个潜在答案:(a)如何在Devise中执行此操作,或者(b)为什么我应该改用Rails 3切换到Authlogic。

3个解决方案
84 votes

您可以仅通过创建新的用户模型来创建新的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

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

David Sulc answered 2020-06-20T00:13:08Z
8 votes

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

为了解决此问题,我有一个非常不完善的解决方案,需要两次调用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 
vanship82 answered 2020-06-20T00:13:33Z
4 votes

对于新人来说,看到这个问题...

一种简单的方法是在您的

config/routes.rb

您应该有如下一行:

devise_for :users

因此,您只需添加一个devise将使用的路径前缀:

devise_for :users, :path_prefix =>'auth'

希望能帮助到你!

Raúl Contreras answered 2020-06-20T00:14:10Z
translate from https://stackoverflow.com:/questions/4660565/how-to-manually-create-a-new-user-and-user-session-in-devise