Страница AngularJS не обновляется с сервера

У меня есть приложение AngularJS. На стороне сервера используется Go, в котором используются пакеты мультиплексирования и сеансов Gorilla Web Toolkit. Приложение Angular имеет две формы на главной странице: «Войти» и «Зарегистрироваться». Данные отправляются в Go с использованием AngularJS $http.post в формате JSON, а соответствующие ответы отправляются обратно с сервера в формате JSON. Чего я хочу добиться, так это того, что на главной странице веб-сайта должны отображаться две разные страницы в зависимости от того, вошел ли пользователь в систему или нет. В настоящее время, когда я отправляю данные формы входа, и сервер отвечает соответствующим ответом, я перезагружаю страницу, но AngularJS продолжает показывать страницу с формами, а не новую страницу.

Код AngularJS

angular.module('app', [])

angular.module('app').controller('SignInController', ['$scope', '$http', function($scope, $http) {
    $scope.formData = {}

    $scope.signIn = function() {
        $http.post('/signIn', {
            email: $scope.formData.email,
            password: $scope.formData.password
        }).success(function(data) {
            console.log(data)
            if(data.ok == true) {
                window.location.reload(true)
            }
        })
    }
}])

Соответствующий код Go Ниже показано, как SignInHandler вызывается при отправке POST для «/signIn», а IndexHandler вызывается при получении «/».

type JsonResponse map[string]interface{}

func (jr JsonResponse) String() (output string) {
    b, err := json.Marshal(jr)
    if err != nil {
        output = ""
        return
    }
    output = string(b)
    return
}

func SignInHandler(w http.ResponseWriter, r *http.Request) {
    session, _ := sessionStore.Get(r, "user-session")

    decoder := json.NewDecoder(r.Body)
    var user User
    err := decoder.Decode(&user)
    if err != nil {
        fmt.Fprint(w, JsonResponse{"ok": false, "message": "Bad request"})
        return
    }

    if user.Email == "" || user.Password == "" {
        fmt.Fprint(w, JsonResponse{"ok": false, "message": "All fields are required"})
        return
    }

    userExists, u := user.Exists()
    if userExists == false {
        fmt.Fprint(w, JsonResponse{"ok": false, "message": "Email and/or password in invalid"})
        return
    }

    err = bcrypt.CompareHashAndPassword([]byte(u.Password), []byte(user.Password))
    if err != nil {
        fmt.Fprint(w, JsonResponse{"ok": false, "message": "Email and/or password in invalid"})
        return
    }

    session.Values["userId"] = u.Id.Hex()

    session.Save(r, w)

    fmt.Fprint(w, JsonResponse{"ok": true, "message": "Authentication Successful"})
}

func IndexHandler(w http.ResponseWriter, r *http.Request) {
    session, _ := sessionStore.Get(r, "promandi-user-session")

    if _, ok := session.Values["userId"]; ok {
        http.ServeFile(w, r, "./views/home.html")
    } else {
        http.ServeFile(w, r, "./views/index.html")
    }
}

person Ayush Agrawal    schedule 09.05.2015    source источник
comment
Вы проверили, отправляется ли файл cookie сеанса обратно при перезагрузке страницы?   -  person CuriousMind    schedule 09.05.2015
comment
Вы смотрели, что происходит со скрипачом?   -  person Steve Drake    schedule 09.05.2015


Ответы (1)


Он начал вести себя правильно после того, как я добавил заголовок «Cache-Control»: «no-store» в свой IndexHandler.

w.Header().Set("Cache-Control", "no-store")
person Ayush Agrawal    schedule 09.05.2015