Файлы cookie не установлены или не отправлены в запросе в iOS Safari или Chrome работают на всех браузерах Android и Desktop - PullRequest
0 голосов
/ 24 января 2019

Я использую заголовок 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 и отправить их обратно - это зарегистрироваться и в следующем запросе, который будет загружать фото.

...