Drupal REST return 301 после входа из ионного приложения
У меня есть веб-приложение на базе drupal 7, и я хочу создать ионное приложение, связанное с этим веб-приложением, с помощью REST.
Действие входа работает хорошо, но после входа в систему я всегда получаю статус 301 Moved Permamently, независимо от того, что я звоню из REST.
Но когда я делаю то же самое, используя ARC или POSTMASTER, все работает хорошо. Я могу успешно войти в систему, получить токен и выйти без проблем.
Я думаю, причина не в том, чтобы правильно установить заголовок. Когда я использую ARC или POSTMASTER, мой запрос содержит Cookie с session_name и sessid, полученные от drupal во время входа в систему.
Также я не могу установить X-CSRF-Token в заголовке.
Но когда я пытаюсь установить его на угловой, ничего не меняется по запросу [заголовки не установлены].
Мой логин контроллер на ионные (угловые):
var login = function(name, pw) {
return $q(function(resolve, reject) {
var data = "username="+name+"&password="+pw;
var config = {
headers : {
'Content-Type': 'application/x-www-form-urlencoded;charset=UTF-8'
}
}
$http.post('http://example.com/user/login.json', data, config)
.then(
function(response){
// success callback
storeUserCredentials(name + '.' + response.data.token, response.data.session_name, response.data.sessid);
storeUserRole(response.data.user.roles);
resolve('Login success.');
},
function(response){
// failure callback
//console.log('error '+response);
reject('Login Failed.');
}
);
});
};
Мой контроллер выхода на ионные (угловые):
var logout = function() {
var data = "username="+name+"&password="+pw;
var config = {
headers : {
'Content-Type': 'application/x-www-form-urlencoded;charset=UTF-8',
'X-CSRF-Token': token,
'Cookie':session_name + '=' + sessid
}
}
$http.post('http://example.com/user/logout.json', data, config)
.then(
function(response){
// success callback
destroyUserCredentials();
},
function(response){
// failure callback
destroyUserCredentials();
}
);
};
1 ответ
Эта техника работает для меня
Я храню "минимальный" объект конфигурации в качестве отправной точки. Этот объект создан с использованием ответа от /services/session/token
как data
В следующих:
localStorageService.set('HTTP_CONFIG', {
headers: {
'Content-type': 'application/json',
'Accept': 'application/json',
'X-CSRF-Token': data
}
});
В отличие от многих примеров в Интернете, я считаю ненужным устанавливать куки вручную. На самом деле, попытка установить куки часто приводит к ошибкам. В этом примере я буду использовать локальное хранилище для создания копий конфигурации http.
Далее я выясняю, залогинен я или нет.
var tokenConfig = localStorageService.get('HTTP_CONFIG');
tokenConfig.url = APP_CONFIG.REST_API + '/system/connect.json';
tokenConfig.method = 'POST';
tokenConfig.data = {};
$http(tokenConfig) ...
Я просто продолжаю таким образом, например:
var loginConfig = localStorageService.get('HTTP_CONFIG');
loginConfig.method = 'POST';
loginConfig.url = APP_CONFIG.REST_API + '/user/login';
loginConfig.data = { username: username, password: password };
$http(loginConfig) ...
Я просто продолжаю использовать тот же "минимальный" объект конфигурации http, добавляя свойства по мере необходимости. Это отлично сработало для меня.