Встраивание входа в систему django в iframe
Мне нужно провести исследование на Amazon MTurk, и я хочу создать одноразового пользователя django и логин для него (поэтому нам не нужно, чтобы пользователь сам регистрировался и входил в систему, это одноразовое исследование, поэтому им не нужно помнить свое имя пользователя или пароль). Я использовал цепочку вызовов jquery ajax для достижения этой цели:
<consent.html>
function startGame() {
$.ajax({
url:'https://comphcithree.eecs.umich.edu:8030/chess1/create_user/',
dataType: 'json',
type: 'POST',
success: function(data) {
console.log('username:', data.username);
console.log('password:', data.password);
$.ajax({
url:'https://comphcithree.eecs.umich.edu:8030/login/',
data: {
'username': data.username,
'password': data.password,
'csrfmiddlewaretoken': csrftoken
},
dataType: 'json',
type: 'POST',
error: function() {
console.log('logged in successfully');
window.location.href = 'https://comphcithree.eecs.umich.edu:8030/start/';
}
});
}
});
это прекрасно работало, когда я обращался к странице через URL django. Но поскольку мне нужно развернуть его на MTurk, мне нужно поместить страницу в HTML iframe, и это перестало работать. Вот как я получаю доступ к странице (consent.html):
<iframe width="1000px" height="600px" src="https://comphcithree.eecs.umich.edu:8030/chess1/consent"></iframe>
Я получил статус 403 forbidden, и объект User
(должен быть) становится AnonymousUser
:
Я проверил, что пользователь успешно создан в нашей базе данных. Затем я подумал, что проблема вызвана CORS, и попытался добавить django-cors-header
в свой settings.py. Вот что я добавил:
INSTALLED_APPS = [
'django.contrib.admin',
'django.contrib.auth',
'django.contrib.contenttypes',
'django.contrib.sessions',
'django.contrib.messages',
'django.contrib.staticfiles',
'chess1',
'django_mysql',
'accounts.apps.AccountsConfig',
'django_extensions',
'corsheaders',
]
MIDDLEWARE = [
'corsheaders.middleware.CorsMiddleware',
'django.middleware.security.SecurityMiddleware',
'django.contrib.sessions.middleware.SessionMiddleware',
'django.middleware.common.CommonMiddleware',
'django.middleware.csrf.CsrfViewMiddleware',
'django.middleware.clickjacking.XFrameOptionsMiddleware',
'django.contrib.auth.middleware.AuthenticationMiddleware',
'django.contrib.messages.middleware.MessageMiddleware',
]
X_FRAME_OPTIONS = 'ALLOWALL'
# CORS_ALLOW_ALL_ORIGINS = True
CORS_ALLOWED_ORIGINS = [
'http://localhost:63342/',
]
CORS_ALLOW_CREDENTIALS = True
CORS_ALLOW_METHODS = [
'DELETE',
'GET',
'OPTIONS',
'PATCH',
'POST',
'PUT',
]
CORS_ALLOW_HEADERS = [
'accept',
'accept-encoding',
'authorization',
'content-type',
'dnt',
'origin',
'user-agent',
'x-csrftoken',
'x-requested-with',
]
Однако ошибка по-прежнему существует. Может быть, я ошибаюсь в том, что вызвало ошибку? Есть ли какие-нибудь предложения? Буду очень признателен.