如何从与devise不同的另一个控制器调用devise的sign_in和sign_out方法?
我有一个 Ruby on Rails 3.0.7 应用程序,并且使用 devise
进行用户身份验证,但我还有一个替代的 sign up
和 sign in
方法,我允许我的用户使用他们的 Facebook
帐户进行注册,然后将该登录信息保存在我的 users
表中,该表与 devise 用于注册和登录用户的表相同。
步骤
- ✔ 用户单击 Facebook 按钮。
- ✔ 我保存他的信息(从
Koala
中提取的姓名和电子邮件)我给用户一个通用密码。 - 使用设备登录该新用户。
- ✔ 重定向到我的主控制器。
我只是错过了第三步,因为我也想继续使用 current_user
帮助程序和 user_signed_in?
帮助程序。
那么我如何告诉 devise 从我的其他控制器自动登录该用户呢?
我在这个问题上看到了类似的内容 设计:让多个控制器处理用户会话 它会登录我的用户,但会导致我进入空白页...
I have a Ruby on Rails 3.0.7 application and my user authentication with devise
but 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
- ✔ User click on the Facebook button.
- ✔ I save his info (name and email extracted from
Koala
) I give the user a generic password. - ☐ Login this new user with devise.
- ✔ 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 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(2)
Devise 提供了一堆助手,其中两个是:
您可以从任何控制器。
编辑
如果使用
sign_in
已经适合您,但让用户处于空白页面,请检查您的日志文件以查看是否正在进行重定向以及重定向到的位置。或者只是使用上面的第二个帮助器来明确重定向。Devise offers a bunch of helpers, two of which are these:
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.在控制器中包含 Devise 助手,所有正常的设计方法(例如
sign_in
或sign_out
)将自动可用。幸运的是,如果您的控制器扩展了
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
orsign_out
would automatically be available there.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 extendApplicationController
, and thus this explicitinclude Devise::Controllers::Helpers
is requiredhttps://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