Jig*_*ggs 7 ruby subdomain ruby-on-rails devise
我想让Devise在我的网站上创建子域名.
现在,我有两个型号:
公司:A Company可以直接在网站上注册,登录后可以邀请其员工.当公司注册时,我想要创建一个独特的子域名(例如example.com => techcraz.example.com.)
员工:Employee只有在收到邀请链接时才能注册.
我想要的是什么:
Companies和的单一登录页面Employees.我是Rails的新手.请帮忙!
提前致谢!
And*_*rie 10
每个用户一个子域是Web应用程序开发中相当常见的用例.这是你如何做到的:
首先:确保你Users table有一个:name column(我认为Devise默认执行此操作 - 如果没有,你可以运行rails g migration AddNameToUsers name:string将此列添加到您的数据库).
要将其User.name用作子域,我们需要确保它只包含字母数字字符(带有可选的下划线).我们还将名称限制为最多32个字符.最后,我们不希望用户选择诸如"www"之类的名称,这些名称将导致诸如" http://www.myapp.com "之类的URL .以下是对以下内容的验证app/models/user.rb:
validates_format_of :name, with: /^[a-z0-9_]+$/,
message: "must be lowercase alphanumerics only"
validates_length_of :name, maximum: 32,
message: "exceeds maximum of 32 characters"
validates_exclusion_of :name, in: ['www', 'mail', 'ftp'],
message: "is not available"
Run Code Online (Sandbox Code Playgroud)
可选:修改db/seeds.rb(以便在初始化数据库时创建测试用户):
user = User.create! :name => 'myname', :email => 'user@example.com',
:password => 'password', :password_confirmation => 'password'
Run Code Online (Sandbox Code Playgroud)
当有人输入与现有用户匹配的子域名的网址时,我们会为用户显示个人资料页面app/controllers/profiles_controller.rb:
class ProfilesController < ApplicationController
def show
@user = User.where(:name => request.subdomain).first || not_found
end
def not_found
raise ActionController::RoutingError.new('User Not Found')
end
end
Run Code Online (Sandbox Code Playgroud)
这是视图的示例文件app/views/profiles/show.html.erb:
<h1>Profile</h1>
<h3><%= @user.name %></h3>
<h3><%= @user.email %></h3>
Run Code Online (Sandbox Code Playgroud)
最后,我们需要为子域实现路由.创建一个这样的类:
class Subdomain
def self.matches?(request)
case request.subdomain
when 'www', '', nil
false
else
true
end
end
end
Run Code Online (Sandbox Code Playgroud)
确保在应用程序启动时自动加载此类config/application.rb:
config.autoload_paths += %W(#{config.root}/lib)
Run Code Online (Sandbox Code Playgroud)
确保您的routes.rb文件包含以下路由:
devise_for :users
resources :users, :only => :show
constraints(Subdomain) do
match '/' => 'profiles#show'
end
Run Code Online (Sandbox Code Playgroud)
如果您用于rails generate配置文件控制器 - 请确保删除get "profiles/show"路由.
有关在应用程序中使用URL Helpers的信息,请参阅此页面(基本上您需要使用new_user_session_url而不是,new_user_session_path您可以指定如下的子域:
root_url(:subdomain => @subdomain)
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
2249 次 |
| 最近记录: |