私のアプリでは、ログイン時にユーザーは電子メールのみを入力し、パスワードは必要ありません。device/warden を使用して認証したいと考えています。
class Users::SessionsController < Devise::SessionsController
include ExpireExistingToken
def new
super
end
def create
self.resource = warden.authenticate!(auth_options)
set_flash_message!(:notice, :signed_in)
sign_in(resource_name, resource)
yield resource if block_given?
resource.update(language: Constant::SUPPORTED_LANGUAGES.key(params['locale'])) if params['locale'].present?
resource.send_otp(force_expire: true) if resource.email_verified?
respond_with resource, location: after_sign_in_path_for(resource)
flash.delete(:notice)
end
def destroy
session.delete(:is_otp_verified)
super
end
end
# frozen_string_literal: true
# Responsible for token expiration
module ExpireExistingToken
extend ActiveSupport::Concern
included do
before_action :remove_existing_token, only: :new
end
protected
def remove_existing_token
uuid = session[:uuid]
usr = User.find_by(uuid: uuid) if uuid
return unless usr
usr.send(:clear_reset_password_token)
usr.save
session.delete(:uuid)
end
end
valid_password をオーバーライドしようとしました?ユーザーモデルで実行しましたが、うまくいきませんでした。これについて私を助けてください。
Devise のパスワード必須検証メソッドをオーバーライドして、保存時に false を返すことができます。特定のリソースまたは機能に対してのみ無効にしたい場合は、保存中にフォームから仮想属性を送信する必要があります。
class User < ActiveRecord::Base
attr_accessor :skip_validation
protected
def password_required?
return false if skip_validation
super
end
end