gpt4 book ai didi

ruby-on-rails - 为什么在这种情况下调试不起作用?

转载 作者:行者123 更新时间:2023-12-04 06:17:49 25 4
gpt4 key购买 nike

我正在使用名为 omniauth-facebook 的 gem ,我成功地实现了 facebook 登录身份验证。

它看起来不错,但它不会将整个对象的数据传递给 View 。它只是说零。

它应该在使用“调试”或“检查”时显示一系列内容。它以某种方式很好地显示了 session[:name] 的内容。

Controller

class SessionsController < ApplicationController
def create
@auth = request.env["omniauth.auth"]
session[:oauth_token] = @auth.credentials.token
session[:username] = @auth.extra.raw_info.username

session[:name] = @auth.extra.raw_info.name
redirect_to bookd_url, :notice => "Signed in!"
end
end

查看

<% if signed_in? %>
<%= @auth.inspect %>
<%= debug @auth %><br />
<%= session[:name] %>
<% end %>

输出 HTML

nil
---
...
John

最佳答案

您的创建 Controller 操作执行重定向。重定向后,流程将从头开始,@auth 将不再定义。如果此时渲染 View ,@auth 将为 nil。这是你的问题。

您需要考虑您要在这里尝试做什么。您根据初始请求中的身份验证详细信息设置了一个 @auth 变量。然后您使用它在 session 中设置一些数据,例如记录谁登录。然后,在用户登录的下一页上,您要查看@auth。这实际上没有意义:一旦您对用户进行了身份验证,您需要关心的只是记住当前登录的用户。您不需要存储有关他们如何登录的详细信息,事实上您可能不应该。

你应该改为这样做:

#in ApplicationController, protected section
protected

def current_user
if @current_user
return @current_user
elsif session[:username]
@current_user = User.find_by_username(session[:username])
return @current_user
end
end

这将允许您在 Controller 中编写 current_user 并查看代码,以访问最初经过身份验证的用户,这就是让某人登录并保持登录状态的全部原因。

关于ruby-on-rails - 为什么在这种情况下调试不起作用?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31139592/

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