我在通过 ajax 请求的子域中遇到 Auth::check() 问题。 设想: 2 个子域
www.testing.dev
api.testing.dev
这两者之间的单一登录/ session ..
在 laravel config/session.php 中,我设置了 'domain' => ".testing.dev",一切正常,我可以在一个页面中登录并继续登录也在另一页!
但是当我使用 ajax 时出现问题..
场景:在 api.testing.dev 中,我使用 firebug、js 等执行
$.ajax({
url: 'http://api.testing.dev/who',
type: 'GET',
cache: false
});
api.stesting.dev/who 返回:
public function getWho(){
return var_dump( Auth::user() );
}
response是我的账号信息!都正确..
如果从 www.testing.dev 我执行相同的 ajax 查询,我得到 Auth::check() 返回 null。虽然我得到正常响应,但跨域设置没有问题。这是我在 api.testing.dev
header('Access-Control-Allow-Origin: *');
header('Access-Control-Allow-Methods: OPTIONS, POST, GET, PUT, DELETE');
header('Access-Control-Allow-Headers: *');
header('Access-Control-Allow-Credentials: true');
header('Access-Control-Allow-Credentials: true');
该网站在带有 wamp 的本地主机中运行。
编辑:使用默认 session 驱动程序'driver' => 'file',在初始登录后,在app/storage/sessions 中有一个文件。如果我从一个子域转到另一个子域,则不会生成其他文件。
虽然当我执行 CORS ajax 时,每次都会生成一个新文件...
最佳答案
看到你的配置,也许你遇到了和我一样的问题。我没有使用 Auth,但每次都使用 session 并得到 null。我通过改变这个解决了它:
header('Access-Control-Allow-Origin: *');
...
header('Access-Control-Allow-Credentials: true');
为此:
header('Access-Control-Allow-Origin: http://localhost:9000');
...
header('Access-Control-Allow-Credentials: true');
我发现的原因是,当您使用凭据时,出于安全目的,它需要指定来源,并且对于 AJAX 请求,它也需要指定凭据。我使用 Angular 并使用 $httpProvider.defaults.withCredentials=true; 完成此操作,但我真的不知道 jQuery 的相应说明,但我希望你能找到它。
使用您最喜欢的调试器(对我来说是 Firebug)检查请求和响应的 header 。他们应该有一个 cookie 属性(它包含带有“laravel”、“token”等的东西)第二次应该等于第一次响应头。
关于php - Laravel CORS 子域 session ,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24231191/
使用rails4,ruby2。我在rails配置中为我的cookiesession设置了30分钟的超时时间。问题是,如果我转到表单,让session超时,然后提交表单,我会收到此ActionController::InvalidAuthenticityToken错误。如何在Rails中优雅地处理这个错误?比如说,重定向到登录屏幕? 最佳答案 在您的ApplicationController:rescue_fromActionController::InvalidAuthenticityTokendoredirect_tosome_p
我去了这个website查看Rails5.0.0和Rails5.1.1之间的区别为什么5.1.1不再包含:config/initializers/session_store.rb?谢谢 最佳答案 这是删除它的提交:Setupdefaultsessionstoreinternally,nolongerthroughanapplicationinitializer总而言之,新应用没有该初始化器,session存储默认设置为cookie存储。即与在该初始值设定项的生成版本中指定的值相同。 关于
我正在尝试使用Sinatra中的重定向和session在网站周围传递一些数据。这是一个简化的示例,使用PrettyPrint进行调试:require'pp'require'rubygems'require'sinatra'enable:sessionsget'/'dosession[:foo]='12345'puts'session1'ppsessionredirectto('/redir')endget'/redir'doputs'session2'ppsession'helloworld'end查看Thin的输出,我看到:>>Listeningon0.0.0.0:4567,CTRL
按照目前的情况,这个问题不适合我们的问答形式。我们希望答案得到事实、引用或专业知识的支持,但这个问题可能会引发辩论、争论、投票或扩展讨论。如果您觉得这个问题可以改进并可能重新打开,visitthehelpcenter指导。关闭9年前。我来自C、php和bash背景,很容易学习,因为它们都有相同的C结构,我可以将其与我已经知道的联系起来。然后2年前我学了Python并且学得很好,Python对我来说比Ruby更容易学。然后从去年开始,我一直在尝试学习Ruby,然后是Rails,我承认,直到现在我还是学不会,讽刺的是那些打着简单易学的烙印,但是对于我这样一个老练的程序员来说,我只是无法将它
我为Devise用户和管理员提供了不同的模型。我也在使用Basecamp风格的子域。除了我需要能够以用户或管理员身份进行身份验证的一些Controller和操作外,一切都运行良好。目前我有authenticate_user!在我的application_controller.rb中设置,对于那些只有管理员才能访问的Controller和操作,我使用skip_before_filter跳过它。不幸的是,我不能简单地指定每个Controller的身份验证要求,因为我仍然需要一些Controller和操作才能被用户或管理员访问。我尝试了一些方法都无济于事。看来,如果我移动authentica
我正在处理oauth1.0(twitter和flickr)。网站工作在80端口,oauth服务器工作在8080端口算法:向oauth服务器发送ajax请求以检查用户是否有有效的access_token如果用户没有access_token或access_token已过期,则打开授权窗口在oauth服务器的用户session中保存access_token发送分享数据到oauth服务器它使用sinatra+rack:session+rack::session::sequel+sqlite来存储session。它在每个响应中发送Set-Cookie:rack.session=id我正在使用2种
我正在尝试为使用omniauth-google-oauth2gem创建session编写测试。我是否需要将env["omniauth.auth"]变量与post:create一起传递?也许当我试图这样做时,我做错了。我得到的错误如下所示...Rake测试错误1)Error:SessionsControllerTest#test_should_get_create:NoMethodError:undefinedmethod`provider'fornil:NilClassapp/models/user.rb:6:in`from_omniauth'app/controllers/sessi
当使用rubyselenium驱动程序驱动chrome时,我得到/home/travis/.rvm/gems/ruby-2.6.2/gems/selenium-webdriver-3.141.5926/lib/selenium/webdriver/remote/response.rb:72:in`assert_ok':sessionnot创建:Chrome版本必须在70和73之间(Selenium::WebDriver::Error::SessionNotCreatedError)如何解决这个问题?降级chrome不是我想做的事。 最佳答案
我找不到任何使用Rack::Session::Cookie的简单示例,并且希望能够将信息存储在cookie中,并在以后的请求中访问它并让它过期.这些是我能找到的唯一示例:HowdoIset/getsessionvarsinaRackapp?http://rack.rubyforge.org/doc/classes/Rack/Session/Cookie.html这是我得到的:useRack::Session::Cookie,:key=>'rack.session',:domain=>'foo.com',:path=>'/',:expire_after=>2592000,:secret=
我在使用session变量时遇到问题。我有两个名为“graduate_students_controller”和“current_students_controller”的Controller。这些Controller中的每一个都控制不同的View文件。我在这两个Controller中使用session变量来存储session信息。问题来了。假设我有两个View文件“reports/current_students_list”、“reports/graduate_students_list”,每个文件都由上述Controller单独控制。现在,如果我尝试从同一浏览器中打开这两个网页并尝