Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/sql-server-2008/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Ruby on rails 3 设计+;omniauth设计帮助程序,如当前用户、已登录用户?不起作用_Ruby On Rails 3_Devise_Omniauth - Fatal编程技术网

Ruby on rails 3 设计+;omniauth设计帮助程序,如当前用户、已登录用户?不起作用

Ruby on rails 3 设计+;omniauth设计帮助程序,如当前用户、已登录用户?不起作用,ruby-on-rails-3,devise,omniauth,Ruby On Rails 3,Devise,Omniauth,我使用omniauth在Facebook上使用Desive and create登录,但有丢失Desive helper方法访问权限(如当前用户和用户登录)的问题吗?方法不起作用 编辑 身份验证控制器 将_重定向到USercontroller仪表板方法 用户控制器 所以在这里,在检查ApplicationController中的登录方法之后,控件应该转到dashboard方法 ApplicationController中的登录方法 应用程序控制器 当我使用facebook登录时,控制台生成了以下

我使用omniauth在Facebook上使用Desive and create登录,但有丢失Desive helper方法访问权限(如当前用户和用户登录)的问题吗?方法不起作用

编辑 身份验证控制器 将_重定向到USercontroller仪表板方法

用户控制器 所以在这里,在检查ApplicationController中的登录方法之后,控件应该转到dashboard方法

ApplicationController中的登录方法

应用程序控制器 当我使用facebook登录时,控制台生成了以下代码

Started GET "/users/52/dashboard" for 127.0.0.1 at Thu Mar 29 12:51:55 +0530 2012     
Processing by UsersController#dashboard as HTML     
  Parameters: {"id"=>"52"}     
Redirected to http://localhost:3000/     
Filter chain halted as :logged_in rendered or redirected     
Completed 302 Found in 2ms (ActiveRecord: 0.0ms)     
在上面的代码中,控件是从logged_-in方法渲染到root_路径的,但它应该渲染dashboard_路径


我猜是用户登录的?helper不工作我也使用当前用户,而不是生成相同的错误

通过Facebook创建用户帐户后,如何登录用户

您应该仍然使用像
登录和重定向这样的设计帮助程序。比如:

user = User.build_from_omniauth(omniauth)
if user.save
  sign_in_and_redirect(:user, user)
end
然后您应该能够使用像
current\u user
user\u signed\u in?
这样的帮助程序(只需检查
current\u user
是否为零)


看看你的编辑,我的答案仍然有效。您需要做的是使用
登录和重定向(:user,user)
,而不仅仅是在会话中设置id。 使用Desive登录后,您可以轻松自定义用户重定向的位置

另一件事,删除这个登录过滤器,设计一个
认证用户方法,您可以将其用作before\u过滤器。它会将用户重定向到登录页面,当他们登录时,它会将他们重定向到他们试图访问的页面


您正在使用Desive,因此请尽量利用它,并阅读文档;)

通过Facebook创建用户帐户后,您如何登录用户

您应该仍然使用像
登录和重定向这样的设计帮助程序。比如:

user = User.build_from_omniauth(omniauth)
if user.save
  sign_in_and_redirect(:user, user)
end
然后您应该能够使用像
current\u user
user\u signed\u in?
这样的帮助程序(只需检查
current\u user
是否为零)


看看你的编辑,我的答案仍然有效。您需要做的是使用
登录和重定向(:user,user)
,而不仅仅是在会话中设置id。 使用Desive登录后,您可以轻松自定义用户重定向的位置

另一件事,删除这个登录过滤器,设计一个
认证用户方法,您可以将其用作before\u过滤器。它会将用户重定向到登录页面,当他们登录时,它会将他们重定向到他们试图访问的页面


您正在使用Desive,因此请尽量利用它,并阅读文档;)

如我所见,
user\u signed\u in?
正在工作,但返回false,因为designe user未登录。要解决此问题,只需在控制器操作中将会话id存储替换为designe
sign\u in
方法:

def create
    omniauth = request.env["omniauth.auth"]    
    user = User.find_by_provider_and_uid(omniauth["provider"], omniauth["uid"]) ||       User.create_with_omniauth(omniauth)    
    sign_in(:user, user)

    # actually if you really really need that id in the session, you can leave this line too :)
    session[:user_id] = user.id 

    redirect_to dashboard_path(user.id), :notice => "Signed in!"    
end 

如我所见,
user\u signed\u in?
正在工作,但返回false,因为designe用户未登录。要解决此问题,只需在控制器操作中将会话id存储替换为designe
sign\u in
方法:

def create
    omniauth = request.env["omniauth.auth"]    
    user = User.find_by_provider_and_uid(omniauth["provider"], omniauth["uid"]) ||       User.create_with_omniauth(omniauth)    
    sign_in(:user, user)

    # actually if you really really need that id in the session, you can leave this line too :)
    session[:user_id] = user.id 

    redirect_to dashboard_path(user.id), :notice => "Signed in!"    
end 

它们究竟是如何不起作用的?未定义的方法?使用Desive(我的意思是没有FB)正常登录是否有效?感谢您的评论,请查看编辑的部分。它们究竟如何不起作用?未定义的方法?使用Desive(我的意思是没有FB)正常登录是否正常?感谢您的评论,请查看编辑的部分谢谢您的回答,但您能告诉我什么是登录(:user,user)以及它会对设备产生什么影响吗?使用Desive()手动登录用户是一个很好的选择。session[:user_id]的问题在于:第一:designe在session中使用不同的密钥,第二:除了在session中存储id之外,还会发生更多的事情。如果您感兴趣,您可以随时查看内部感谢您的回答您是生命救世主。谢谢您的回答,但您能告诉我什么是登录(:user,user)以及它会对设备产生什么影响吗?使用designe()手动登录用户是一种很好的方法。session[:user_id]的问题在于:第一:designe在session中使用不同的密钥,第二:除了在session中存储id之外,还会发生更多的事情。如果你感兴趣,你可以随时检查你的内在感谢你的答案你是生命的救世主。
def create
    omniauth = request.env["omniauth.auth"]    
    user = User.find_by_provider_and_uid(omniauth["provider"], omniauth["uid"]) ||       User.create_with_omniauth(omniauth)    
    sign_in(:user, user)

    # actually if you really really need that id in the session, you can leave this line too :)
    session[:user_id] = user.id 

    redirect_to dashboard_path(user.id), :notice => "Signed in!"    
end