ruby-on-rails – 设计 – 登录子域名

ruby-on-rails – 设计 – 登录子域名,第1张

概述我在具有多个子域和多个架构的rails应用程序中使用devise gem. 每个子域都由控制器处理,在application_controller.rb上看起来像这样: def load_subdomain @account = Account.find_by_subdomain!(request.subdomain)enddef after_sign_in_path_for(res 我在具有多个子域和多个架构的rails应用程序中使用devise gem.

每个子域都由控制器处理,在application_controller.rb上看起来像这样:

def load_subdomain    @account = Account.find_by_subdomain!(request.subdomain)enddef after_sign_in_path_for(resource)    #admin login in domain    if resource.is_a?(admin)       admin_path    #user login in subdomain    elsif resource.is_a?(user)      subdomain_root_path    else      super    end      end

在routes.rb上

match '/' => 'subdomains#index',:constraints => { :subdomain => /.+/ },:as => :subdomain_rootdevise_for :users,:skip => [:sessions,:registrations]  devise_scope :user do    get '/login/user' => 'sesusers#new',:as => :new_session_user    post '/signin/user' => 'sesusers#create',:as => :user_session    delete '/logout/user' => 'sesusers#destroy',:as => :destroy_user_session    post '/send/user' => 'passwordusers#create',:as => :passwordusers_create    get '/change_password/user' => 'passwordusers#edit',:as => :passwordusers_edit    put '/change/user' =>  'passwordusers#update',:as => :passwordusers_update  end

这导致每个子域具有多个sign_in URL.

subdomain1.lvh.me:3000/login/usersubdomain2.lvh.me:3000/login/usersubdomain3.lvh.me:3000/login/user......etc

在sesusers_controller.rb上

class SesusersController < Devise::SessionsController  include Tenantable::Schema::Controller  before_filter :load_subdomain  def new    super  end  def create    logger.info "Logged in"    super  end  def destroy    logger.info "logout success"    super  endend

当我尝试登录时,成功登录并重定向到subdomain_root_path

Started POST "/signin/user" for 127.0.0.1 at 2013-04-08 20:36:04 +0700Processing by SesusersController#create as HTML  Parameters: {"utf8"=>"Γ£ô","authenticity_token"=>"DJ/MJnHU5pHwxQQYDSvwyBsawmx/9Ms7CXx3me0MBBE=","user"=>{"email"=>"[email protected]","password"=>"[FILTERED]","remember_me"=>"0"},"commit"=>"Login"}  Account Load (2.0ms)  SELECT "public"."accounts".* FROM "public"."accounts" WHERE "public"."accounts"."subdomain" = 'subdomain1' liMIT 1Logged in  User Load (2.0ms)  SELECT "users".* FROM "users" WHERE "users"."email" = '[email protected]' liMIT 1   (2.0ms)  BEGIN   (53.0ms)  UPDATE "users" SET "last_sign_in_at" = '2013-04-08 12:55:28.631212',"current_sign_in_at" = '2013-04-08 13:36:04.615889',"sign_in_count" = 4 WHERE "users"."ID" = 16   (7.0ms)  COMMITRedirected to http://subdomain1.lvh.me:3000/Completed 302 Found in 1589ms (ActiveRecord: 0.0ms)Started GET "/" for 127.0.0.1 at 2013-04-08 20:36:06 +0700Processing by SubdomainsController#index as HTML  Account Load (2.0ms)  SELECT "public"."accounts".* FROM "public"."accounts" WHERE "public"."accounts"."subdomain" = 'subdomain1' liMIT 1  CACHE (0.0ms)  SELECT "public"."accounts".* FROM "public"."accounts" WHERE "public"."accounts"."subdomain" = 'subdomain1' liMIT 1   (30.0ms)  select sum(pg_total_relation_size(table_schema || '.' || table_name)) from information_schema.tables where table_schema in ('subdomain') group by table_schema  Rendered subdomains/index.HTML.erb within layouts/subdomain (81.0ms)Completed 200 OK in 170ms (VIEws: 130.0ms | ActiveRecord: 33.0ms)

看,成功登录..查看子域名

<div >     <div >         <% if user_signed_in? %>            <%= link_to current_user.name,'#',{ :class => 'btn btn-danger dropdown-toggle','data-toggle' => 'dropdown' } %>                <ul >                  <li> <%= link_to "Dashboard",'style' =>"color:#fff" %></li>                </ul>         <% else %>            <%= link_to ('<i ></i>').HTML_safe + " Login" +(' <span ></span>').HTML_safe,'data-toggle' => 'dropdown' } %>                <ul >                   <li><%= link_to "User",new_session_user_path,'style' =>"color:#000" %></li>                </ul>         <% end %>    </div></div>

但是在查看子域current_user.name不显示时,只显示登录按钮.

有人能帮我吗?

谢谢/

解决方法 您只需要在子域之间共享用户会话,以便可以使用多个子域继续一个会话.

您应该在初始化时修改session_store.rb文件,

DemoApp::Application.config.session_store :cookie_store,key: '_jcrop_app_session',domain: ".maindomain.com"

添加域将工作并小心最后的前导“.”子域所需的(期间).

总结

以上是内存溢出为你收集整理的ruby-on-rails – 设计 – 登录子域名全部内容,希望文章能够帮你解决ruby-on-rails – 设计 – 登录子域名所遇到的程序开发问题。

如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。

欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/langs/1294394.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-06-10
下一篇 2022-06-10

发表评论

登录后才能评论

评论列表(0条)

保存