相关疑难解决方法(0)

Rails - 如何覆盖设计SessionsController以在用户登录时执行特定任务?

使用Devise管理用户会话/注册我需要每次用户登录时,以及在通过设计重定向到主页以进行连接之前执行特定任务(例如,更新此特定用户的users表中的某些字段)用户.

我是否必须覆盖设计SessionsController,如果是,如何?

ruby-on-rails devise

40
推荐指数
3
解决办法
4万
查看次数

Warden auth失败后,Rails日志中没有状态代码

我已经设置了带有--api标志的Rails 5(5.0.0.rc1)应用程序.它使用Warden进行身份验证.

这一切都有效,除了当Warden身份验证失败时,响应未被正确记录.日志看起来像这样:

Started GET "/widgets.json" for ::1 at 2016-06-14 11:38:20 +0000
Processing by WidgetsController#index as JSON
Completed   in 0ms (ActiveRecord: 0.0ms)
Run Code Online (Sandbox Code Playgroud)

或者,在生产中:

I, [2016-06-14T14:12:54.938271 #17625]  INFO -- : [db39f895-eeb1-4861-91d0-5d52c124e37a] Completed   in 1ms (ActiveRecord: 0.0ms)
Run Code Online (Sandbox Code Playgroud)

它当然应该说Completed 401 Unauthorized in...,但无论出于何种原因,它都不知道响应的状态代码.

Warden身份验证错误被发送到Rack兼容的ActionController::Metal控制器,非常简单:

class UnauthorizedController < ActionController::Metal
  include ActionController::Head

  def self.call(env)
    @respond ||= action(:respond)
    @respond.call(env)
  end

  def respond
    head :unauthorized
  end
end
Run Code Online (Sandbox Code Playgroud)

它使用基本head方法来响应(不需要渲染任何东西),所以可能它的行为与head在常规Rails控制器中使用的行为相同.但不是.

如果我尝试使用redirect_to ...render ...(包括相关模块之后)也会发生同样的事情.所以在Rack→Rails→Warden→Warden failure app(控制器)的某个地方,响应的状态代码丢失了.日志知道开始记录请求,并知道它已被处理,因为它显然吐出了"已完成..." - …

logging rack ruby-on-rails warden

8
推荐指数
1
解决办法
501
查看次数

摆脱DEPRECATION警告:不推荐使用env,它将从Rails 5.0中删除.

在迁移到Rails 5.0.0.beta1时,我发现了很多弃用警告:

DEPRECATION WARNING: env is deprecated and will be removed from Rails 5.0. (called from XXX at YYY)
Run Code Online (Sandbox Code Playgroud)

我试图摆脱它,并试图找到一个替代方案,但在actionpack changelog中找不到任何东西.

有任何想法吗 ?

actionpack ruby-on-rails-5

5
推荐指数
1
解决办法
1552
查看次数

设计:注册登录尝试

我有一个使用devise的 Rails 3.0 项目,每次成功登录和每次失败尝试都要求我在数据库中注册。

设计文档中,我认为我必须扩展,FailureApp但示例只是重定向用户,根本不使用模型。在stackoverflow中,我刚刚发现了这个问题,但仍未得到解答,这并不令人鼓舞

谁能告诉我这种方法是否正确,或者不能以这种方式完成,或者是否有一些更简单的替代方法我错过了?

(我知道还没有代码,我只是在潜入之前寻找一个小的指导)

谢谢。

ruby-on-rails devise

4
推荐指数
2
解决办法
4819
查看次数