gpt4 book ai didi

ruby-on-rails - Devise - 多个用户的单点登录表单

转载 作者:行者123 更新时间:2023-12-03 00:38:20 25 4
gpt4 key购买 nike

我有两个 Devise 模型,用户和业务;我希望两者都能够使用单一登录表单进行登录。我正在使用主干js并且我有一个自定义 View ,所以 View 不是问题。使用ajax请求进行登录,它按预期适用于用户,但不适用于企业。

我在谷歌上搜索过,找到了一些提到使用 STI 来解决这个问题的解决方案,但是该项目已经完成了,我现在无法进行这样的更改。我正在考虑重写 Devise session Controller ,并且:

  1. 检查给定的电子邮件地址是否是用户,然后使用 Warden 对用户进行身份验证。
  2. 如果未找到具有该电子邮件地址的用户,则使用 Warden 通过业务模型进行身份验证。

我不知道如何更改代码来实现上述目标,我不知道 Warden 是如何工作的,以及我需要调整哪些参数来实现上述目标,需要调用哪些函数。任何人都可以为我指明正确的方向,或者提供一个例子来说明我应该如何继续前进。

谢谢。

最佳答案

别担心,你没有被困住。

我认为最好的选择是覆盖 Devise 的 session Controller 并更改 session 的"new"和“创建”方法。

因此,在您自己的“sessions_controller.rb”中,您将拥有如下内容:

class SessionsController < Devise::SessionsController
# GET /resource/sign_in
def new
resource = build_resource(nil, :unsafe => true)
clean_up_passwords(resource)
respond_with(resource, serialize_options(resource))
end

# POST /resource/sign_in
def create
resource = warden.authenticate!(auth_options)
set_flash_message(:notice, :signed_in) if is_navigational_format?
sign_in(resource_name, resource)
respond_with resource, :location => after_sign_in_path_for(resource)
end
end

在您的 route ,您可以使用类似的内容(取决于您命名的用户模型):

devise_for :users, :controllers => {
:sessions => 'sessions'
}


devise_for :businesses, :controllers => {
:sessions => 'sessions'
}

上面的 session Controller 根本没有自定义。我不知道你的代码,所以我无法提供帮助。但基本步骤是:

  1. 检查 auth_optionsresource_name 变量以了解它们如何存储数据。
  2. 添加条件逻辑,以便在“用户”表中找不到资源时更改这些变量。

设计很棒,角色也很棒,但有时只有一个用户模型,甚至使用 STI,没有意义。我很快就会就这个问题写一篇更长的文章,因为我在最近的一个项目中处理过这个问题。

关于ruby-on-rails - Devise - 多个用户的单点登录表单,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12532659/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com