Я использую заголовок set-cookie, созданный на бэкэнде, чтобы установить на устройстве безопасный cookie только для http. Это работает как шарм на настольных Safari, Chrome, FF, IE и т. Д. Это также работает на Android Chrome. Однако, когда я попытался запустить тот же самый точный код из моего веб-приложения на iOS в мобильном Safari или Chrome, в запросе не было отправлено cookie, и мое веб-приложение не работает.
Я попытался просмотреть другие ответы и вопросы о переполнении стека, а также попытался изменить мои настройки и протестировать несколько разных устройств iOS. Я хочу, чтобы мое веб-приложение работало без изменения настроек iOS Safari по умолчанию. Я искренне не понимаю, почему iOS не работает ... так как это поведение кажется беспрецедентным.
выдает cookie с включенными токенами
(authorization.py)
#creates the cookie string for the response
def setCookie(name, value, expires='', domain=None,
secure=False, httponly=False, path=None):
morsel = cookies.Morsel()
# morsel.set(name, value, quote(value))
morsel.set(name, value, value)
expires = datetime.utcnow() + timedelta(days=365)
expireStr = expires.strftime("%a, %d %b %Y %X GMT")
print(expireStr)
morsel['expires'] = expireStr
if path:
morsel['path'] = path
if domain:
morsel['domain'] = domain
if secure:
morsel['secure'] = secure
value = morsel.OutputString()
if httponly:
value += '; httponly'
print(value)
return value
def issueCookieTokens(userData):
accessToken = issueAccessToken(userData).decode('utf-8')
refreshToken = issueRefreshToken(userData).decode('utf-8')
tokens = {'accessToken': accessToken, 'refreshToken': refreshToken}
return setCookie('tokens', json.dumps(tokens), path= '/', secure=True, httponly=True)
(customfuncs.py)
headers = {
'Access-Control-Allow-Origin': 'REDACtED',
'Access-Control-Allow-Credentials': True
}
def makeHeader(cookieVal):
newHeader = headers
print("cookieVal: " + cookieVal)
newHeader['Set-Cookie'] = cookieVal
print(newHeader['Set-Cookie'])
return newHeader
(где я возвращаю ответ)
создать ответ для возврата на устройство
response = {"statusCode": 200,
"headers": customfuncs.makeHeader(authorization.issueCookieTokens(userItem)),
"body": json.dumps({'Item': userItem}, cls=decimalencoder.DecimalEncoder)}
return response
Я ожидаю, что мой ответ вернется успешно, включив мой json в тело возврата, и успешно вернув заголовок, который устанавливает cookie, используя заголовок set-cookie для хранения безопасного cookie только для http, в котором хранятся мои токены доступа / обновления для пользователя. Файл cookie также следует отправлять в последующих запросах. Если вы хотите проверить это сами, сайт имеет номер https://swipeme.in. Я сохраняю куки во время входа и регистрации. Лучший способ протестировать набор файлов cookie и отправить их обратно - это зарегистрироваться и в следующем запросе, который будет загружать фото.