这个主要是测试微信公众号的时候使用。速度快,而且很方便。
执行命令为:
ssh -C -N -g -R 80:127.0.0.1:3000 root@115.28.47.91
配置方法:
在远程机器的ssh配置文件 /etc/ssh/sshd.config 中添加以下内容:
GatewayPorts yes
然后执行命令,重启SSH
/etc/init.d/ssh restart
或
/etc/init.d/sshd restart
ssh -C -N -g -R 80:127.0.0.1:3000 root@115.28.47.91
GatewayPorts yes
/etc/init.d/ssh restart
/etc/init.d/sshd restart
class User < ActiveRecord::Base
# Include default devise modules. Others available are:
# :confirmable, :lockable, :timeoutable and :omniauthable
devise :database_authenticatable, :registerable,
:recoverable, :rememberable, :trackable, :validatable
end
class BusinessUser < User
default_scope { where(role: 1) }
end
class Admin < User
default_scope { where(role: 0) }
end
在Routes文件中添加对不同角色的登录routes: devise_for :admin
devise_for :business_user, controllers: {
sessions: 'business_user/sessions',
passwords: 'business_user/passwords'
}
devise_group :user, contains: [ :business_user, :admin]
class User < ActiveRecord::Base
# Include default devise modules. Others available are:
# :confirmable, :lockable, :timeoutable and :omniauthable
devise :database_authenticatable, :registerable,
:recoverable, :rememberable, :trackable, :validatable,
:authentication_keys => [:login]
attr_accessor :login
def login=(login)
@login = login
end
def login
@login || self.business_num || self.phone || self.email
end
def self.find_for_database_authentication(warden_conditions)
conditions = warden_conditions.dup
if login = conditions.delete(:login)
where(conditions.to_h).where(["business_num = :value OR phone = :value OR email = :value", { :value => login }]).first
else
where(conditions.to_h).first
end
end
def self.find_first_by_auth_conditions(warden_conditions)
conditions = warden_conditions.dup
if login = conditions.delete(:login)
where(conditions).where(["business_num = :value OR email = :value", { :value => login }]).first
else
if conditions[:business_num].nil?
where(conditions).first
else
where(business_num: conditions[:business_num]).first
end
end
end
end
before_action :configure_permitted_parameters, if: :devise_controller?
private
def configure_permitted_parameters
devise_parameter_sanitizer.for(:sign_up) { |u|
u.permit(:business_num, :phone, :email, :password, :password_confirmation, :remember_me)
}
devise_parameter_sanitizer.for(:sign_in) { |u|
u.permit(:login, :business_num, :phone, :email, :password, :remember_me)
}
devise_parameter_sanitizer.for(:account_update) { |u|
u.permit(:business_num, :phone, :email, :password, :password_confirmation, :current_password, :reset_password_token)
}
end
<%= f.text_field :login, :autofocus => true, :class => "loginInput", %>
config.warden do |manager|
manager.failure_app = CustomFailure
end
class CustomFailure < Devise::FailureApp
def redirect_url
if warden_options[:scope] == :business_user
session[:is_mobile] == true ? mobile_login_url : new_business_user_session_url
else
new_admin_session_path
end
end
# You need to override respond to eliminate recall
def respond
if http_auth?
http_auth
else
redirect
end
end
end
同时需要在 application.rb 中添加代码加载这个文件: config.autoload_paths << Rails.root.join('lib')