如何从与devise不同的另一个控制器调用devise的sign_in和sign_out方法?

发布于 2024-12-11 01:35:19 字数 642 浏览 0 评论 0原文

我有一个 Ruby on Rails 3.0.7 应用程序,并且使用 devise 进行用户身份验证,但我还有一个替代的 sign upsign in 方法,我允许我的用户使用他们的 Facebook 帐户进行注册,然后将该登录信息保存在我的 users 表中,该表与 devise 用于注册和登录用户的表相同。

步骤

  1. ✔ 用户单击 Facebook 按钮。
  2. ✔ 我保存他的信息(从 Koala 中提取的姓名和电子邮件)我给用户一个通用密码。
  3. 使用设备登录该新用户。
  4. ✔ 重定向到我的主控制器。

我只是错过了第三步,因为我也想继续使用 current_user 帮助程序和 user_signed_in? 帮助程序。

那么我如何告诉 devise 从我的其他控制器自动登录该用户呢?

我在这个问题上看到了类似的内容 设计:让多个控制器处理用户会话 它会登录我的用户,但会导致我进入空白页...

I have a Ruby on Rails 3.0.7 application and my user authentication with devisebut and I have an alternative sign up and sign in methods, I allow my users to sign up using their Facebook account then I save that login info in my users table the same one that devise uses to register and login users.

Steps

  1. ✔ User click on the Facebook button.
  2. ✔ I save his info (name and email extracted from Koala) I give the user a generic password.
  3. ☐ Login this new user with devise.
  4. ✔ Redirect to my main controller.

I'm just missing the 3rd step because I want to keep using the current_user helper and the user_signed_in? helper too.

So how do I tell devise to sign in this user automatically from my other controller?

I saw something like that on this question Devise: Have multiple controllers handle user sessions and it logs my user in but leads me to an blank page...

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(2

陈甜 2024-12-18 01:35:19

Devise 提供了一堆助手,其中两个是:

sign_in(resource_or_scope, *args)
sign_in_and_redirect(resource_or_scope, *args)

您可以从任何控制器。

编辑

如果使用sign_in已经适合您,但让用户处于空白页面,请检查您的日志文件以查看是否正在进行重定向以及重定向到的位置。或者只是使用上面的第二个帮助器来明确重定向。

Devise offers a bunch of helpers, two of which are these:

sign_in(resource_or_scope, *args)
sign_in_and_redirect(resource_or_scope, *args)

You can use these from any controller.

EDIT

If using sign_in already works for you but leaves the user on a blank page, check your logfile to see if there is a redirect going on, and where it redirects to. Or just make the redirect explicit by using the second of the helpers above.

背叛残局 2024-12-18 01:35:19

在控制器中包含 Devise 助手,所有正常的设计方法(例如 sign_insign_out)将自动可用。

class TestController < RocketPants::Base
  include Devise::Controllers::Helpers

幸运的是,如果您的控制器扩展了 ApplicationController,Devise 会自动将这些帮助器作为便捷方法包含在内。

但是,RockePants 存储库解释了控制器不扩展 ApplicationController 的特定情况,因此此显式 include Devise::Controllers::Helpers 为必填项
https://github.com/filtersquad/rocket_pants/issues/7

另外,官方设计文档有助于找到您可以通过包含助手来使用的其他方法
http://rubydoc.info/github/plataformatec/devise/master/Devise /控制器/助手

Include Devise helpers in your controller and all the normal devise methods, e.g. sign_in or sign_out would automatically be available there.

class TestController < RocketPants::Base
  include Devise::Controllers::Helpers

Fortunately, if your controller extends ApplicationController, Devise includes these helpers as convenience methods automatically.

But, the RockePants repo explains a specific case where the controller doesn't extend ApplicationController, and thus this explicit include Devise::Controllers::Helpers is required
https://github.com/filtersquad/rocket_pants/issues/7

Also, the official Devise docs are helpful to find other methods you will be able to use by including helpers
http://rubydoc.info/github/plataformatec/devise/master/Devise/Controllers/Helpers

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文