Я пытаюсь перенаправить пользователя на последнюю ссылку после входа в систему через Gmail, FB
Вот четыре вещи, которые я попробовал, но не добился успеха
1) пользователь$_SERVER['HTTP_REFERER']
Но он перенаправляет меня обратно в gmail вместо последней ссылки на моем сайте.
2) Использование $_SESSION
— Я пытаюсь сохранить последний URL в сессии до входа в систему, но после входа в систему я не получаю его значение, так как сессия была пустой.
3) Использование куки — я тоже пытаюсь использовать кокки, но это тоже не работает
4) Я пытаюсь отправить последний URL как $_GET
параметр в URL-адресе перенаправления, но это останавливает вход в Google, так как этот URL-адрес не совпадает с URL-адресом, сохраненным в приложении Google.
Есть ли другой способ добиться этого?
Я не понимаю, почему использование куки не работает. Перед перенаправлением пользователя на сервер авторизации сохраните текущий URL-адрес в файле cookie. Когда AS перенаправляет пользователя обратно на redirect_uri
, эта страница делает еще одно перенаправление на URL, сохраненный в куки.
Но мне больше нравится версия, в которой вы включаете «URL последней страницы» в запрос (4-й элемент в вашем списке). Поскольку Google, по-видимому, не допускает использование подстановочных знаков в их конфигурации OAuth, вы можете использовать state
параметр вместо. От RFC 6749 — структура авторизации OAuth 2.0:
state
RECOMMENDED. An opaque value used by the client to maintain
state between the request and callback. The authorization
server includes this value when redirecting the user-agent back
to the client. The parameter SHOULD be used for preventing
cross-site request forgery as described in Section 10.12.
Когда вы создаете свой URL перенаправления, вы просто устанавливаете state
параметр вроде так:
https://accounts.google.com/o/oauth2/v2/auth
?client_id=MY_CLIENT_ID
&redirect_uri=http://example.com/oauth-redirect_uri
&scope=REQUESTED_SCOPES
&state=http://example.com/last-page-the-user-loaded
В зависимости от вашего потока OAuth, сервер авторизации перенаправит пользователя на URL, который выглядит примерно так при успешной авторизации:
http://example.com/oauth-redirect_uri
?code=CODE
&state=http://example.com/last-page-the-user-loaded
Ваш сервер может затем обработать state
параметр и перенаправить пользователя соответственно.
Вы будете проверять, вошел ли пользователь в систему или нет с какой-либо функцией, и если нет, вы бы взяли пользователя на страницу входа, на которой пользователь может войти в систему с помощью Google или FB.
Предполагая это,
Я бы сказал, сохраните предыдущую ссылку в SESSION в той же функции, в которой вы проверяете, вошел ли пользователь в систему или нет,
Я пишу фрагмент кода, и вы можете получить от него идею написать свой конкретный код.
if(isset($_SERVER['HTTP_REFERER']))
{
$_SESSION['url_to_go'] = $_SERVER['HTTP_REFERER'];
}
И когда пользователь входит в систему успешно, проверьте, если ключ сеанса url_to_go
присутствует, затем перенаправьте пользователя на ссылку или перенесите его на панель инструментов или на любую имеющуюся у вас страницу по умолчанию.
Итак, как вы сказали, сессия очищается, когда мы возвращаемся с социального сайта, вы можете использовать localStorage
с JS (хранилище браузера) для хранения $_SERVER['HTTP_REFERER']
и когда вы вернетесь, вы можете получить его и очистить после того, как вы используете его один раз.