这个主要是测试微信公众号的时候使用。速度快,而且很方便。
执行命令为:
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')