我刚刚开始研究Devise用于用户身份验证的Rails 4(4.2.3)应用程序.我希望用户能够在签署upp之前通过创建测试项目并以guest用户身份登录来使用该应用程序.当用户注册(或在)时,我想将测试项目分配给新的当前用户.
我一直在关注Platformatec的这个指南:https://github.com/plataformatec/devise/wiki/How-To : -Create-a-guest-user
创建guest用户工作,但在注册或使用活动guest虚拟机用户会话时,我收到以下错误:
Filter chain halted as :require_no_authentication rendered or redirected
Run Code Online (Sandbox Code Playgroud)
如果我清除我的会话它是有效的.管理我的访客用户的方法如下所示:
def current_or_guest_user
if current_user
if session[:guest_user_id] && session[:guest_user_id] != current_user.id
logging_in
guest_user(with_retry = false).try(:destroy)
session[:guest_user_id] = nil
end
current_user
else
guest_user
end
end
Run Code Online (Sandbox Code Playgroud)
如前所述,创建访客用户似乎工作得很好.但这种逻辑永远不会发生:
# should delete the guest user and clear the session.
if current_user
if session[:guest_user_id] && session[:guest_user_id] != current_user.id
logging_in
guest_user(with_retry = false).try(:destroy)
session[:guest_user_id] = nil
end
current_user
Run Code Online (Sandbox Code Playgroud)
我很确定我的访客用户会话与我的新用户冲突并导致此Devise错误(因为访客用户在注册时永远不会被删除):
Filter chain halted as :require_no_authentication rendered or redirected …Run Code Online (Sandbox Code Playgroud) 意图
我已经创建了一个用户模型,如设计文档所示。后来,我搭建了一个控制器和视图,以便有一个索引和一个可视化界面来处理我的用户。
问题
访问edit_user_path 后,我向数据库提交了一个新用户,SQLite 添加了记录(因此正在保存信息),但是发生了一些事情,我没有被重定向到根目录,而是得到一个异常:
ActionController::UnknownFormat in Devise::RegistrationsController#create
Run Code Online (Sandbox Code Playgroud)
如何修复此异常并使 Rails 流向 root_path?
在这里,我向您添加文件,以便您可以辨别发生了什么:
路由文件
#RESTful routes
devise_for :users
resources :users, :except => [:create]
resources :clans
resources :games
resources :matches
#Root and debug
root :to => 'debug#features'
Run Code Online (Sandbox Code Playgroud)
耙路线
Prefix Verb URI Pattern Controller#Action
new_user_session GET /users/sign_in(.:format) devise/sessions#new
user_session POST /users/sign_in(.:format) devise/sessions#create
destroy_user_session DELETE /users/sign_out(.:format) evise/sessions#destroy
user_password POST /users/password(.:format) devise/passwords#create
new_user_password GET /users/password/new(.:format) devise/passwords#new
edit_user_password GET /users/password/edit(.:format) devise/passwords#edit
PATCH /users/password(.:format) devise/passwords#update
PUT /users/password(.:format) devise/passwords#update
cancel_user_registration GET /users/cancel(.:format) devise/registrations#cancel
user_registration …Run Code Online (Sandbox Code Playgroud)