Skip to content

Commit ba9fe28

Browse files
committed
添加 browser_warrior 这个浏览器兼容相关的gem,并进行了初始化。
1 parent 453ae4c commit ba9fe28

13 files changed

Lines changed: 161 additions & 78 deletions

File tree

Gemfile

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -154,7 +154,7 @@ gem 'graphql', '~> 1.9'
154154
# gem "postmark-rails"
155155

156156
# 拒绝低版本浏览器的访问,并给其返回一个让其升级的页面。
157-
# gem 'browser_warrior', '>= 0.8.0'
157+
gem 'browser_warrior', '>= 0.8.0'
158158

159159
# 异常监控通知
160160
# gem 'exception_notification'

Gemfile.lock

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -76,6 +76,11 @@ GEM
7676
popper_js (>= 1.14.3, < 2)
7777
sassc-rails (>= 2.0.0)
7878
brakeman (4.8.1)
79+
browser (4.2.0)
80+
browser_warrior (0.14.0)
81+
browser (>= 4.0, < 5)
82+
rails (>= 5.0, < 7)
83+
sass-rails
7984
bugsnag (6.13.0)
8085
concurrent-ruby (~> 1.0)
8186
builder (3.2.4)
@@ -597,6 +602,7 @@ DEPENDENCIES
597602
bootsnap (>= 1.1.0)
598603
bootstrap (~> 4.3.0)
599604
brakeman
605+
browser_warrior (>= 0.8.0)
600606
bugsnag (~> 6.12)
601607
bullet
602608
byebug

app/views/layouts/application.html.erb

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -2,6 +2,11 @@
22
<html>
33
<head>
44
<title>InitGems</title>
5+
<!-- browser_warrior 这个gem推荐的设置。-->
6+
<meta http-equiv="X-UA-Compatible" content="IE=edge,chrome=1" />
7+
<meta name="renderer" content="webkit" />
8+
9+
<!-- 设置跨站点请求伪造保护参数和令牌-->
510
<%= csrf_meta_tags %>
611
<%= csp_meta_tag %>
712

config/encrypted_file.yml.enc

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1 @@
1+
zv4XXccGdpTPvMRPrz5sdPpNum9Zbzy4Wt+CFbzz0oBe7vE0NG+0npN8FVoX14GdEDjjOW9yWZFvUrpZB1sMC0HtuY4=--2ijcFU6TVd1WQHQ2--gyeUsmQKRRa8DYhUpo4Egg==

config/environments/production.rb

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -159,7 +159,7 @@
159159
config.lograge.custom_options = lambda do |event|
160160
{ time: Time.now.strftime("%Y-%m-%d %H:%M:%S"), host: event.payload[:host]}
161161
end
162-
# 可以添加一个钩子以直接访问控制器方法(例如request和current_user)该哈希将自动合并到日志数据中。
162+
# 可以添加一个钩子以直接访问控制器方法(例如request和current_user)该哈希将自动合并到日志数据中。
163163
config.lograge.custom_payload do |controller|
164164
{
165165
protocol: controller.request.protocol.match(/([a-zA-Z]*)/)[0].to_s
Lines changed: 26 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,26 @@
1+
# 该gem是根据browser这个gem扩展的,设置的过程中可以参考browser这个gem。
2+
BrowserWarrior.detect do |browser|
3+
next true if Rails.env.test?
4+
next true if browser.bot?
5+
6+
next true unless browser.known?
7+
8+
# Allow weixin callback
9+
next true if browser.platform.other?
10+
11+
# See https://github.com/fnando/browser#usage for more usage
12+
next true if browser.wechat?
13+
next true if browser.weibo?
14+
next true if browser.facebook?
15+
16+
# Block known non-modern browser
17+
next false if browser.chrome?("<= 65")
18+
next false if browser.safari?("< 10")
19+
next false if browser.firefox?("< 52")
20+
next false if browser.ie?("< 11")
21+
next false if browser.edge?("< 15")
22+
next false if browser.opera?("< 50")
23+
24+
# Allow by default
25+
next true
26+
end

config/routes.rb

Lines changed: 17 additions & 49 deletions
Original file line numberDiff line numberDiff line change
@@ -1,9 +1,9 @@
11
# == Route Map
22
#
33
# Prefix Verb URI Pattern Controller#Action
4-
# new_user_session GET /users/sign_in(.:format) users/sessions#new
5-
# user_session POST /users/sign_in(.:format) users/sessions#create
6-
# destroy_user_session DELETE /users/sign_out(.:format) users/sessions#destroy
4+
# new_user_session GET /users/login(.:format) users/sessions#new
5+
# user_session POST /users/login(.:format) users/sessions#create
6+
# destroy_user_session DELETE /users/logout(.:format) users/sessions#destroy
77
# user_github_omniauth_authorize GET|POST /users/auth/github(.:format) users/omniauth_callbacks#passthru
88
# user_github_omniauth_callback GET|POST /users/auth/github/callback(.:format) users/omniauth_callbacks#github
99
# user_wechat_omniauth_authorize GET|POST /users/auth/wechat(.:format) users/omniauth_callbacks#passthru
@@ -14,7 +14,7 @@
1414
# PUT /users/password(.:format) users/passwords#update
1515
# POST /users/password(.:format) users/passwords#create
1616
# cancel_user_registration GET /users/cancel(.:format) users/registrations#cancel
17-
# new_user_registration GET /users/sign_up(.:format) users/registrations#new
17+
# new_user_registration GET /users/register(.:format) users/registrations#new
1818
# edit_user_registration GET /users/edit(.:format) users/registrations#edit
1919
# user_registration PATCH /users(.:format) users/registrations#update
2020
# PUT /users(.:format) users/registrations#update
@@ -26,6 +26,7 @@
2626
# new_user_unlock GET /users/unlock/new(.:format) users/unlocks#new
2727
# user_unlock GET /users/unlock(.:format) users/unlocks#show
2828
# POST /users/unlock(.:format) users/unlocks#create
29+
# users_logout GET /users/logout(.:format) users/sessions#destroy
2930
# authenticated_root GET / static_pages#home
3031
# unauthenticated_root GET / users/sessions#new
3132
# users GET /users(.:format) users#index
@@ -37,63 +38,30 @@
3738
# PUT /users/:id(.:format) users#update
3839
# DELETE /users/:id(.:format) users#destroy
3940
# sidekiq_web /sidekiq Sidekiq::Web
40-
# queue_status GET /queue-status(.:format) #<Proc:0x00007fb24cd8bb88@/Users/poly/www/ruby/init_gems/config/routes.rb:87>
41+
# queue_status GET /queue-status(.:format) #<Proc:0x00007ff15863dbd8@(eval):19>
42+
# GET /*unmatched_route(.:format) application#route_not_found
4143
# rails_service_blob GET /rails/active_storage/blobs/:signed_id/*filename(.:format) active_storage/blobs#show
4244
# rails_blob_representation GET /rails/active_storage/representations/:signed_blob_id/:variation_key/*filename(.:format) active_storage/representations#show
4345
# rails_disk_service GET /rails/active_storage/disk/:encoded_key/*filename(.:format) active_storage/disk#show
4446
# update_rails_disk_service PUT /rails/active_storage/disk/:encoded_token(.:format) active_storage/disk#update
4547
# rails_direct_uploads POST /rails/active_storage/direct_uploads(.:format) active_storage/direct_uploads#create
4648

4749
Rails.application.routes.draw do
48-
# get 'sessions/create'
49-
# root 'static_pages#home'
50-
devise_for :users, module: :users, path_names: {
51-
sign_in: 'login',
52-
sign_out: 'logout',
53-
sign_up: 'register'
54-
}
55-
56-
devise_scope :user do
57-
get 'users/logout', to: "users/sessions#destroy"
58-
# 登录后的主页变成了 static_pages#home
59-
authenticated :user do
60-
root 'static_pages#home', as: :authenticated_root
61-
end
62-
63-
# 未登录的话就跳转到登录首页,也就是users/session#new
64-
unauthenticated do
65-
root 'users/sessions#new', as: :unauthenticated_root
66-
end
50+
def draw(routes_name)
51+
instance_eval(File.read(Rails.root.join("config/routes/#{routes_name}.rb")))
6752
end
6853

54+
# 配置 +devise+ 相关的路由
55+
draw :devise
56+
6957
resources :users
7058

71-
# get "/auth/:action/callback", :controller => "authentications", :constraints => { :action => /wechat|github/ }
72-
# get "/auth/:provider/callback" => "authentications#github"
59+
# 配置 +sidekiq+ 相关的路由
60+
draw :sidekiq
61+
62+
# 配置 +api+ 相关的路由
63+
draw :api
7364

7465
# 匹配未定义的路由到 application下的route_not_found 方法中。
7566
get '*unmatched_route', to: 'application#route_not_found'
76-
77-
# sidekiq的路由相关开始
78-
# 注意该路由(/sidekiq/stats)可以看到json格式sidekiq的一些状态信息。
79-
require 'sidekiq/web'
80-
81-
# 配置sidekiq ui登录的权限,更高级配置可以看文档。
82-
Sidekiq::Web.use Rack::Auth::Basic do |username, password|
83-
ActiveSupport::SecurityUtils.secure_compare(::Digest::SHA256.hexdigest(username.to_s), ::Digest::SHA256.hexdigest('admin')) &
84-
ActiveSupport::SecurityUtils.secure_compare(::Digest::SHA256.hexdigest(password.to_s), ::Digest::SHA256.hexdigest('123456'))
85-
end
86-
mount Sidekiq::Web => '/sidekiq'
87-
88-
# 如果提交表单的时候返回了一个Forbidden错误的话,在rails5.2及以上的版本中进行这样配置。
89-
Sidekiq::Web.set :session_secret, Rails.application.credentials[:secret_key_base]
90-
91-
# 如果使用ui的时候session被覆盖重写的话,添加这行命令。
92-
Sidekiq::Web.set :sessions, false
93-
94-
# 使用该api后可以通过路由/queue-status去查询'default'队列积压的情况。如果响应为“uhoh”,就会触发一封电子邮件。
95-
require 'sidekiq/api'
96-
match "queue-status" => proc { [200, {"Content-Type" => "text/plain"}, [Sidekiq::Queue.new.size < 100 ? "OK" : "UHOH" ]] }, via: :get
97-
# sidekiq的路由相关结束
98-
9967
end

config/routes/api.rb

Whitespace-only changes.

config/routes/devise.rb

Lines changed: 21 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,21 @@
1+
# get "/auth/:action/callback", :controller => "authentications", :constraints => { :action => /wechat|github/ }
2+
# get "/auth/:provider/callback" => "authentications#github"
3+
4+
devise_for :users, module: :users, path_names: {
5+
sign_in: 'login',
6+
sign_out: 'logout',
7+
sign_up: 'register'
8+
}
9+
10+
devise_scope :user do
11+
get 'users/logout', to: "users/sessions#destroy"
12+
# 登录后的主页变成了 static_pages#home
13+
authenticated :user do
14+
root 'static_pages#home', as: :authenticated_root
15+
end
16+
17+
# 未登录的话就跳转到登录首页,也就是users/session#new
18+
unauthenticated do
19+
root 'users/sessions#new', as: :unauthenticated_root
20+
end
21+
end

config/routes/sidekiq.rb

Lines changed: 19 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,19 @@
1+
# 注意该路由(/sidekiq/stats)可以看到json格式sidekiq的一些状态信息。
2+
require 'sidekiq/web'
3+
4+
# 配置sidekiq ui登录的权限,更高级配置可以看文档。
5+
Sidekiq::Web.use Rack::Auth::Basic do |username, password|
6+
ActiveSupport::SecurityUtils.secure_compare(::Digest::SHA256.hexdigest(username.to_s), ::Digest::SHA256.hexdigest('admin')) &
7+
ActiveSupport::SecurityUtils.secure_compare(::Digest::SHA256.hexdigest(password.to_s), ::Digest::SHA256.hexdigest('123456'))
8+
end
9+
mount Sidekiq::Web => '/sidekiq'
10+
11+
# 如果提交表单的时候返回了一个Forbidden错误的话,在rails5.2及以上的版本中进行这样配置。
12+
Sidekiq::Web.set :session_secret, Rails.application.credentials[:secret_key_base]
13+
14+
# 如果使用ui的时候session被覆盖重写的话,添加这行命令。
15+
Sidekiq::Web.set :sessions, false
16+
17+
# 使用该api后可以通过路由/queue-status去查询'default'队列积压的情况。如果响应为“uhoh”,就会触发一封电子邮件。
18+
require 'sidekiq/api'
19+
match "queue-status" => proc { [200, {"Content-Type" => "text/plain"}, [Sidekiq::Queue.new.size < 100 ? "OK" : "UHOH" ]] }, via: :get

0 commit comments

Comments
 (0)