2017-10-26 1 views
2

장애 응용 프로그램을 사용할 때 감시인 (감시자 만 사용, 감시자없이)을 사용하여 인증하는 데 문제가 있습니다.실패 응용 프로그램을 사용할 때 감시자 인증이 실패 함

오류 응용 프로그램을 사용하지 않도록 구성된 수호자를 사용할 때이 오류가 발생하지 않습니다.

도와주세요!

내 warden.rb 설정/초기화/warden.rb :

Rails.application.config.middleware.use Warden::Manager do |manager| 
    manager.default_strategies :password 
    manager.failure_app = -> (env) { 
    SessionsController.action(:new).call(env) } 
end 

Warden::Manager.serialize_into_session do |user| 
    user.id 
end 

Warden::Manager.serialize_from_session do |id| 
    User.find(id) 
end 

Warden::Strategies.add(:password) do 
    def authenticate! 
    user = User.find_by(email: params['email']) 

    if user && user.authenticate(params['password']) 
     success! user 
    else 
     fail 'Invalid email or password' 
    end 
    end 
end 

routes.rb :

Rails.application.routes.draw do 
    root 'home#index' 

    get 'sessions/new' 
    post 'sessions/create' 
    get 'sessions/destroy' 

    get 'login', to: 'sessions#new' 
    post 'login', to: 'sessions#create' 
    get 'logout', to: 'sessions#destroy' 

    resources :users 
end 

SessionsController :

class SessionsController < ApplicationController 
    def new 
    flash.now[:alert] = warden.message if warden.message.present? 
    end 

    def create 
    warden.authenticate! 
    redirect_to root_path, notice: 'Logged in!' 
    end 

    def destroy 
    warden.logout 
    redirect_to root_path, notice: 'Logged out!' 
    end 
end 

와 ApplicationController :

class ApplicationController < ActionController::Base 
    protect_from_forgery with: :exception 

    private 

    def current_user 
    warden.user 
    end 

    def warden 
    request.env['warden'] 
    end 

    helper_method :current_user 
end 

오류 화면 :

enter image description here

역 추적 :

이것은 당신의 CSRF의 authentici과 관련이있다 enter image description here

답변

0

토큰이 유효하지 않음 - 두 번 사용, 각 컨트롤러에서 한 번 사용?

당신은 운이 SessionsController

skip_before_action :verify_authenticity_token, only: [:new] 

를 추가 할 수도 있습니다.

관련 문제