gem devise # for devise omniauth on user scope 访问的是admin/sign_in ,根据path 来确定前面的路由值 devise_for :users, path: "admin", controllers: { omniauth_callbacks: "omniauth_callbacks" } devise_scope :user do get 'mobile/sign_in', to: 'mobile/sessions#new', as: :new_user_session delete 'mobile/sign_out', to: 'mobile/sessions#destroy', as: :destroy_user_session end #devise默认使用email进行登陆,如果使用其他字段修改model中的:authentication_keys devise :database_authenticatable, :registerable, :recoverable, :rememberable, :trackable, :validatable, :authentication_keys => [:login] attr_accessor :login # 实现login的读写方法,此处是email和用户名登陆即可 def login=(login) @login = login end def login @login || self.email || self.name end # 还需注意overwrite devise self.find_first_by_auth_conditions def self.find_first_by_auth_conditions(warden_conditions) conditions = warden_conditions.dup if login = conditions.delete(:login) where(conditions).where(["lower(phone) = :value OR lower(email) = :value", { :value => login.downcase }]).first else if conditions[:phone].nil? where(conditions).first else where(phone: conditions[:phone]).first end end end # 很多时候不同的角色登陆成功后展现的页面不同(默认返回root_path) #此时可重写 after_sign_in_path_for和 after_sign_out_path_for 方法 def after_sign_out_path_for(scope) new_admin_stores_path end def after_sign_in_path_for(scope) root_path end # 某些路由访问(controller中)登陆后才可进行操作,此时可使用devise提供的 before_action :authenticate_user! # 必须登陆后
gem devise
最新推荐文章于 2020-12-14 20:15:02 发布