Отправка запросов с учетными данными - PullRequest
0 голосов
/ 26 мая 2019

Я сделал аутентификационный API, созданный с помощью ruby ​​на рельсах 5, и интерфейс js реагировать.Он работает, принимая электронную почту и пароль, и отправляя куки обратно в браузер.Однако, когда я пытаюсь сделать запрос, консоль выдает следующую ошибку:

Доступ к XMLHttpRequest по адресу http://localhost:3000/users/login' from origin 'http://localhost:3001' заблокирован политикой CORS: Ответчтобы предпечатный запрос не проходил проверку контроля доступа: значение заголовка «Access-Control-Allow-Credentials» в ответе равно «», которое должно быть «true», если режим учетных данных запроса «include».Режим учетных данных запросов, инициируемых XMLHttpRequest, управляется атрибутом withCredentials.

    #react component - signin.js

    axios(
        `http://localhost:3000/users/login`, {
        method: "post",
        withCredentials: true,        
        data: {email: this.state.email, password: this.state.password}
        })
    .then(response => {
        console.log(response)
    })
    .catch(error => console.log(error))

}

      #rails login function
           def login
          #fetch user
           user = User.find_by(email: params[:email].to_s.downcase)
            #authenticate method
              if user && user.authenticate(params[:password])
        #disallow unconfirmed emails
        if user.confirmed_at?
            auth_token = JsonWebToken.encode({user_id: user.id})
            ##
            cookies.signed[:jwt] = {value:  auth_token, httponly: true}

            render json: {auth_token: auth_token, email:user.email}, 
              status: :ok


          else
            render json: {error: 'Email not verified' }, status: 
             :unauthorized
        end
    else
      render json: {error: 'Invalid username / password'}, status: 
            :unauthorized
    end
  end

1 Ответ

0 голосов
/ 06 июня 2019

Я думаю, что вы должны использовать стойки Cors.

  1. Добавить драгоценный камень 'rack-cors' в ваше приложение rails Gemfile

    gem 'rack-cors'

  2. Добавьте приведенный ниже код в config / application.rb

Rails.application.config.middleware.insert_before 0, Rack::Cors do allow do origins 'example.com' resource '*', headers: :any, methods: [:get, :post, :put, :patch, :delete, :options, :head] end end

Вместо «example.com» в источниках выможете указать конечную точку своего происхождения или использовать «*», чтобы разрешить все.

...