小编Ray*_*ski的帖子

Rails 5,Apartment and Devise:使用子域名登录无效

我已经在Apartment(1.2.0)和Devise(4.2.0)中设置了Rails 5应用程序.由于一些DDNS问题,存在约束,即应该只能访问应用程序app.myapp.com(注意子域app).myapp.com重定向到app.myapp.com.

我的用例是,每个注册到应用程序的用户(租户)都应该通过他们的子域(例如tenant.myapp.com)访问他们的特定数据.不应将用户限定为其子域.基本上应该可以从任何子域登录.重定向到租户的正确子域由ApplicationController.处理.根据Devise标准,登录页面位于app.myapp.com/users/sign_in.这就是问题的开始:

由于"电子邮件或密码不正确"错误,用户无法登录.

在开发过程中我玩了一下.从lvh.me作品中登录完美.用户已登录并重定向到其子域.尝试相同app.lvh.me会导致上述问题.

我已将会话存储设置为:

# /config/initializers/session_store.rb
Rails.application.config.session_store :cookie_store, key: '_myapp_session', domain: {
  production:   '.app.myapp.com',
  staging:      '.app.myapp.com',
  development:  '.app.lvh.me'
}.fetch(Rails.env.to_sym, :all)
Run Code Online (Sandbox Code Playgroud)

我也尝试过以下方法:

Rails.application.config.session_store :cookie_store, key: '_myapp_session', domain: :all
Run Code Online (Sandbox Code Playgroud)

我需要做什么才能从任何子域登录?

测试案例将是:

用户user1访问网址app.myapp.com/users/sign_in提供其凭据,因此登录并重定向到user1.myapp.com.

奖励:user1访问网址another_user.myapp.com/users/sign_in提供他们的凭据,因此登录并重定向到user1.myapp.com.

编辑

其他相关配置:

# /config/initializers/apartment.rb
config.excluded_models = %w{ User }
config.tenant_names = lambda { …
Run Code Online (Sandbox Code Playgroud)

ruby ruby-on-rails devise apartment-gem

5
推荐指数
1
解决办法
2554
查看次数

Spring Boot 在 WebSocket 上使用 Stomp:由于升级标头无效,握手失败:null

我在 Spring Boot 应用程序中使用 ws(非安全 WebSocket)。一旦客户端尝试连接到服务器,就会出现以下错误:

\n

Handshake failed due to invalid Upgrade header: null

\n

Spring Boot 应用程序在 Apache 代理后面的 Ubuntu 服务器上运行。Apache配置如下:

\n
<VirtualHost *:80>\n    DocumentRoot /var/www/myapp/public/\n    ServerAdmin webmaster@localhost\n    ServerName  app.myapp.biz\n\n    RewriteEngine       On\n    RewriteCond         %{HTTP:Upgrade}^websocket$ [NC,OR]\n    RewriteCond         %{HTTP:Connection}^upgrade$ [NC]\n    RewriteRule         .* "ws:/127.0.0.1:8096/$1" [P,QSA,L]\n\n    ProxyPreserveHost   On\n    ProxyRequests       Off\n    ProxyPass           / http://127.0.0.1:8096/\n    ProxyPassReverse    / http://127.0.0.1:8096/\n    RequestHeader       set X-Forwarded-Proto http\n    RequestHeader       set X-Forwarded-Port 80\n\n    SetEnv mongo_username           aUser\n    SetEnv mongo_password           aPassword\n</VirtualHost>\n
Run Code Online (Sandbox Code Playgroud)\n

application.properties的如下:

\n
debug=false\nserver.port=8096\nserver.address=127.0.0.1\n\nserver.forward-headers-strategy=native\nserver.tomcat.use-relative-redirects=true\nserver.tomcat.remoteip.protocol-header=x-forwarded-proto\nserver.tomcat.remoteip.remote-ip-header=x-forwarded-for\nserver.tomcat.remoteip.port-header=x-forwarded-port\n
Run Code Online (Sandbox Code Playgroud)\n

当在我的开发机器上运行应用程序时,一切正常。一旦部署到服务器上就会出现上述错误。我\xe2\x80\x99已经用谷歌搜索了很多,但无法\xe2\x80\x99找到针对这个问题的具体内容。我希望有人能帮帮忙。

\n

信息:尝试连接的前端应用程序是一个 Angular 应用程序,使用 …

java apache spring spring-websocket angular

2
推荐指数
1
解决办法
3053
查看次数