【问题标题】:authenticate user using devise in custom controller使用自定义控制器中的设计对用户进行身份验证
【发布时间】:2011-03-29 03:11:38
【问题描述】:

我正在使用 rails 3 并进行设计,我希望有一个 SecurityController,我在其中调用诸如 sign_in_user 或 reset_password 之类的方法,这将是一个将用户名和密码等参数传递给它的帖子。

我知道我可以使用 before_filter :authenticate_user!但我想验证自己。如果身份验证成功,那么我希望该用户登录。

我这样做的原因是因为我有一个 iphone 应用程序,它依赖于对网络应用程序的身份验证才能使用该应用程序。

【问题讨论】:

    标签: ruby-on-rails-3 authentication devise


    【解决方案1】:

    我自己还没有理由这样做,但是如果您阅读https://github.com/plataformatec/devise 的“配置控制器”部分,它会显示如何创建扩展 Devise::SessionsController 的自定义控制器,然后指向您的身份验证路由到该控制器。我认为这就是您要问的问题——对吗?

    从页面引用...

    如果视图级别的自定义不够,您可以按照以下步骤自定义每个控制器:

    1) 创建您的自定义控制器,例如 Admins::SessionsController:

    class Admins::SessionsController < Devise::SessionsController
    end
    

    2) 告诉路由器使用这个控制器:

    devise_for :admins, :controllers => { :sessions => "admins/sessions" }
    

    3)由于我们更改了控制器,它不会使用“devise/sessions”视图,所以记得将“devise/sessions”复制到“admin/sessions”。

    【讨论】:

    • 我只想自定义2种方法....验证和重置密码。有没有办法让我在不扩展整个会话控制器并重写其他方法的情况下做到这一点
    • 正如我所说,我没有尝试过扩展制作这样的控制器扩展,但如果你必须重写任何东西,我会感到非常惊讶。扩展任何类型的类的全部意义在于继承该类的正常行为,然后根据需要添加或修改。您不必重写任何内容,只需覆盖您需要更改的内容。如果您需要在某个被覆盖的方法中调用默认行为,请使用super
    • 我可以确认史蒂夫所说的话。如果您决定要自定义一个控制器并包含 Steve 建议的代码行(以及复制必要的视图),那么即使您将这些自定义控制器留空,Devise 也会完全一样地工作。您没有特别覆盖的任何操作都默认返回到 Devise 的内置操作。您执行 覆盖的任何操作都可以通过调用super 来添加到原始操作
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2018-07-16
    • 2016-07-05
    • 2013-05-17
    • 2012-01-29
    • 1970-01-01
    • 1970-01-01
    • 2010-12-23
    相关资源
    最近更新 更多