На сервере по умолчанию используется африканский часовой пояс, и пользователь получает время в этом поясе, несмотря на наличие промежуточного программного обеспечения в коде PHP Laravel.
Код: Выделить всё
class UpdateTimezoneMiddleware
{
/**
* Handle an incoming request.
*
* @param \Closure(\Illuminate\Http\Request): (\Symfony\Component\HttpFoundation\Response) $next
*/
public function handle(Request $request, Closure $next): Response
{
if (auth()->check()) {
$user = auth()->user();
$user->update([
"timezone" => $request->header("timezone") ?? $user->timezone
]);
}
return $next($request);
}
}
Моя природа — усложнять простые задачи.
Не знаю PHP и личинки
Понимание
Мое понимание управления исходным кодом следующее: сервер сохраняет временную метку в африканском часовом поясе всякий раз, когда пользователь проходит аутентификацию и обращается к API. Затем часовой пояс обновляется через заголовок запроса. Таким образом, мы сохраняем данные в нашей базе данных с указанием часового пояса пользователя, который можно использовать для отображения и хранения времени.
Этот метод несовершенен
Рассуждение
Вот причина: если человек путешествует по плану и регистрируется в приложении всякий раз, когда он путешествует вперед, бэкэнд потока времени находится в определенных условиях, поэтому даже его деятельность движется по прямой линии. но в нашей базе данных данные хранятся в обратном времени.
Это дополнительная ошибка!!
Сложная природа затменияИтак, я поставил перед собой новую задачу:
- Сделать часовым поясом приложения по умолчанию UTC
- Я не буду обновлять часовой пояс, во время ответа я перейду на UTC + любой часовой пояс пользователя.
Обработка логики, изменение базы данных и одновременное изучение нового языка и фреймворка Нет, спасибо.Итак, я решил использовать язык и структуру, которые мне удобны для создания этой функциональности: Python или fastapi, но это сделано Starlette. Response:
if(request.method == "GET"):
response:Response = await call_next(request)
timezone = request.headers.get("x-timezone", default="UTC")
try:
user_tz = pytz.timezone(timezone)
except pytz.UnknownTimeZoneError:
user_tz = pytz.UTC
if(response.status_code == 200 and response.headers.get("content-type") == "application/json"):
response_body = b""
async for chunk in response.body_iterator:
response_body += chunk
body = response_body.decode()
print("body is " + f"{body}")
body = json.loads(body)
for key, value in body.items():
pts = self.__convert_string_to_datetime(value)
if( pts != None):
new_time_stamp = pts.astimezone(user_tz)
body[key] = new_time_stamp
print("I come here")
string_body = json.dumps(body)
response_body = string_body.encode()
headers = dict(response.headers)
print(headers)
print(headers["content-length"])
print(len(response_body))
headers["content-length"] = str(len(response_body))
return Response(content=response_body, status_code=response.status_code, headers=headers, media_type=response.media_type)
return response
return await call_next(request)
[/code]
Ошибки
Он неполный, потому что в нем так много проблем, например, строка в json выдаст ошибку, если я использую объект времени (что является моей основной целью строить). Если json через список, то он это не обрабатывает. Не очень хорошая техника синтаксического анализа, просто использовался цикл.
В некотором смысле мое решение было для меня губительным.
Но я не знаю, почему эта простая задача является даря мне кошмар. Почему мне приходится делать так много вещей. Я думал, что будет обычным использовать временную метку часового пояса UTC (в настоящее время она напрямую сохраняется в базе данных create_at = Column(DateTime, default=datetime.datetime.now(pytz.UTC)) SqlAlchemy) или временную метку Unix, чтобы рассматривать время как прямую линию, чтобы нам не приходилось беспокоиться о возможных ошибках путешествий во времени. Итак, возможно, они все используют такие подходы.
Если кто-нибудь хоть раз разбирается в PHP и Larval, так что, возможно, мой вывод может быть ошибочным, возможно, то, что я наблюдаю, неверно,
опять же мое наблюдение: «обновление промежуточного программного обеспечения PHP в базе данных, часовой пояс пользователя»
Задача:
Дано мне: В Интерфейс для получения времени африканского часового пояса должен снова сделать текущий часовой пояс пользователя
Сделано в: промежуточное программное обеспечение, которое будет проверять получение запроса пользователя, преобразование данных часового пояса и в ответ обновлять UTC + user_timezone
Мое ожидание:
Мое исключение из решения — найти лучший метод решения моей задачи. Если я иду на правильный путь, тогда помогите личинке PHP решить этот код. Если не в PHP, личиночная помощь также доступна в Python.
Все, что может помочь уменьшить мой кошмар
Исходный код: https:// github.com/DeepeshKalura/learn-series-middleware
Подробнее здесь: https://stackoverflow.com/questions/786 ... r-approach
Мобильная версия