ruby-on-rails – 设计Ajax登录:’sessions#create’仅在成功时
发布时间:2020-12-17 04:01:40 所属栏目:百科 来源:网络整理
导读:我的目标是使用Devise实现Ajax登录解决方案,并尽可能减少模式的变化.我已经部分达到了它,但是故障回调存在一个问题.让我解释一下这个场景: 使用remote显示模式中的登录表单:true Rails / UJS约定(OK); 创建自定义会话控制器并指向Devise(OK); 创建一个JS视
我的目标是使用Devise实现Ajax登录解决方案,并尽可能减少模式的变化.我已经部分达到了它,但是故障回调存在一个问题.让我解释一下这个场景:
>使用remote显示模式中的登录表单:true Rails / UJS约定(OK); 问题:我的create.js.erb只包含一个警报(“测试正常”).当我使用正确的凭据提交会话#new表单时,执行文件create.js.erb,将显示警报.但如果凭证错误,则返回401 Unauthorized status并忽略create.js.erb. 也许有人知道在登录失败时使create.js.erb运行的快速技巧.这样我就不需要创建独立的Ajax脚本或更改整个会话控制器. 谢谢, 环境: VERSIONS: Rails 4.0.2 Devise 3.2.2 定制会话控制器: class Website::SessionsController < ::Devise::SessionsController respond_to :js # without it neither on success create.js.erb runs layout false # action `new` pure html which is rendered in a modal box end 会议/ create.js.erb alert("Test ok"); 登录失败时的服务器日志: Started POST "/users/sign_in" for 127.0.0.1 at 2014-03-27 09:59:47 -0300 Processing by Website::SessionsController#create as JS Parameters: {"utf8"=>"?","user"=>{"email"=>"","password"=>"[FILTERED]"},"commit"=>"Fazer login"} Completed 401 Unauthorized in 1ms 解决方法
出现问题的原因是:
它会引发异常并且不会渲染您的视图. 您应该为自己的行为覆盖SessionsController #create动作.例如这样: def create self.resource = warden.authenticate(auth_options) if resource && resource.active_for_authentication? ... sign_in(resource_name,resource) ... else ... end end (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |