Ошибка CORS при попытке доступа к Golang Backend с Ember Frontend - PullRequest
0 голосов
/ 15 февраля 2019

Итак, вот моя проблема.Я пишу простое приложение, которое отправляет данные в API.К сожалению, я не могу получить данные для публикации.Каждый раз, когда я пытаюсь опубликовать сообщение, я получаю следующую ошибку:

Доступ к XMLHttpRequest по адресу http://localhost:8000/api/v1/users' from origin 'http://localhost:4200' заблокирован политикой CORS: Ответ напредварительный запрос не проходит проверку контроля доступа: он не имеет статуса HTTP ok.

(если больше нужна информация, чтобы помочь, пожалуйста, просто спросите, и я включу ее.Очень длинный, поэтому я вырезаю немного кода.)

Мой текущий код выглядит так:

Ember:

route route / user / add.js

import Route from '@ember/routing/route';

export default Route.extend({
  model: function(){
    return this.store.createRecord('user');
  }
});

Контроллер / контроллеры / пользователи / add:

import Controller from '@ember/controller';

export default Controller.extend({
  actions: {
    saveUser: function(){
      this.get('model').save().then(user => this.transitionToRoute('users.user', user));
    }
  }
});

Модели моделей / user

импорт DS из 'ember-data';

export default DS.Model.extend({
  username: DS.attr('string'),
  password: DS.attr('string'),
  firstName: DS.attr('string'),
  lastName: DS.attr('string'),
  roles: DS.attr('string'),
  pic: DS.attr('string'),
});

Просмотр просмотров / пользователей / добавление

<div class="col-md-12">
  <h4 class='form-label'><b>Add new pet</b></h4>
  <form role="form" id="addUserForm">
    <div class="form-group">
      <label for="username">UserName:</label>
      {{input class="form-control" id="username" value=model.username}}
    </div>
    <div class="form-group">
      <label for="password">password:</label>
      {{input class="form-control" id="password" value=model.password}}
    </div>
    <div class="form-group">
      <label for="firstName">firstName:</label>
      {{input class="form-control" id="firstName" value=model.firstName}}
    </div>

    <div class="form-group">
      <label for="lastName">lastName</label>
      {{input class="form-control" id="lastName" value=model.lastName}}
    </div>

    <div class="form-group">
      <label for="roles">roles</label>
      {{input class="form-control" id="roles" value=model.roles}}
    </div>

    <div class="form-group">
      <label for="pic">pic</label>
      {{input class="form-control" id="pic" value=model.pic}}
    </div>
    <button type="submit" class="btn btn-default" {{action 'saveUser'}}>Submit</button>
  </form>
</div>

GoLang

main.go

import (
    "github.com/rs/cors"
    "log"
    "net/http"
)

func main() {
    r := NewRouter()

    c := cors.New(cors.Options{
        AllowedMethods: []string{"GET","POST", "PATCH", "DELETE", "OPTIONS"},
        AllowedOrigins: []string{"*", "*", "*"},
        AllowCredentials: false,
        AllowedHeaders: []string{"application/json", "Content-Type, Access-Control-Allow-Origin"},
        OptionsPassthrough: true,
        Debug: true,

    })

    handler := c.Handler(r)

    log.Fatal(http.ListenAndServe(":8000", handler))
}

модели / пользователь

type User struct {
    Id        int    `jsonapi:"primary,users"`
    Username  string `jsonapi:"attr,username"`
    Password  string `jsonapi:"attr,password"`
    FirstName string `jsonapi:"attr,firstname"`
    LastName  string `jsonapi:"attr,lastname"`
    Role      string `jsonapi:"attr,role"`
    Pic       string `jsonapi:"attr,pic"`
}

apiuserhandler.go

func ModifyUser(w http.ResponseWriter, r *http.Request) {
    fmt.Println("Modify Handler")
    jsonApiRuntime := jsonapi.NewRuntime().Instrument("/")

    vars := mux.Vars(r)
    fmt.Println(vars["id"])

    id, err := strconv.Atoi(vars["id"])

    if err != nil {
        fmt.Println("Invalid User")
        return
    }

    user := ReadUser(&models.User{Id: id})
    if err := jsonApiRuntime.UnmarshalPayload(r.Body, user); err != nil {
        http.Error(w, err.Error(), 500)
        fmt.Println(err.Error())

        return
    }

    UpdateUser(user)

    if err := jsonApiRuntime.MarshalPayload(w, user); err != nil {
        http.Error(w, err.Error(), 500)
    }

    w.WriteHeader(201)
    w.Header().Set("Content-Type", "application/vnd.api+json")
}
...