Вы можете пропустить этот параметр (страницу, на которой они находились) как параметр к вашему return_to
.Как отмечено в спецификации :
Примечание: URL-адрес return_to МОЖЕТ использоваться в качестве механизма для проверяющей стороны, чтобы присоединить контекст о запросе аутентификации к ответу аутентификации.Этот документ не определяет механизм, с помощью которого RP может гарантировать, что параметры запроса не будут изменены внешними сторонами;такой механизм может быть определен самим RP.
Например:
def sendOpenIDCheck(...):
# after getting an AuthRequest from Consumer.begin
return_to = oidutil.appendArgs(return_to,
{'destination_url': that_place_they_tried_to_go})
return redirect(auth_request.redirectURL, realm, return_to))
def handleReturnTo(request):
# after doing Consumer.complete and receiving a SuccessResponse:
return redirect(request.GET['destination_url'])
Если есть какое-то другое состояние, которое вам нужно отслеживать (например, данные POST), или у вас естьчрезвычайно длинный URL, который вы не можете вписать в качестве параметра запроса, или вам нужно, чтобы пользователь подделал destination_url
, вы храните эту информацию на стороне сервера, отправляете ключ в качестве параметра запроса вместо URLи посмотрите его, когда они вернутся.
Не сильно отличается от сохранения его в сеансе, если только у пользователя не было нескольких одновременных вкладок в одном сеансе, которые затем выполняются, а затем наличие в запросе помогает.