Я создаю PHP REST API, который будет использоваться с клиентом JavaScript, и у меня возникнут некоторые проблемы, касающиеся того, как реализовать аут и доступ к ним. Будет несколько приложений, которые будут использовать библиотеку JavaScript, которую я буду разрабатывать, чтобы говорить и взаимодействовать с моим приложением. Я буду предоставлять ключи API каждому из них, так что это не проблема.
Когда я начинаю запутываться, так это то, как пользователи на этих сайтах аутентифицируются в моем приложении. Похоже, плохая идея, чтобы этот внешний сайт хранил мою учетную запись пользователя и пароль; поэтому, я думаю, мне нужно, чтобы моя библиотека JavaScript включала виджет входа, который запрашивает информацию об учетной записи пользователя для моего приложения.
Если аутентификация прошла успешно, так как я работаю с REST API, мне нужно будет сохранить токен, полученный в cookie на стороне клиента, или что-то еще, чтобы пользователю не нужно снова входить в мое приложение каждой странице внешнего сайта. Однако, что произойдет, если пользователь выходит из внешнего сайта, а затем другой пользователь входит в тот же браузер? Что касается моей библиотеки JavaScript, старый пользователь все равно будет зарегистрирован в моем приложении, потому что cookie/токен еще не истек - как я могу очистить свой файл cookie, когда заканчивается предыдущий сеанс пользователя? Или, я совсем не прав, здесь?
Итак, я думаю, что процесс будет примерно таким:
var token; // Some hashed string containing an expiration date and user id
var apiKey = '123abc';
// Read the cookie and check if it already contains the token
token = readCookie('token');
if (token == '') {
// get username and password from user through some prompt
var request_data = {apiKey: apiKey, user: username, pass: password};
$.post('https://service.com/api/user/login', request_data, function(data) {
token = data;
document.cookie = "token=" + token;
});
}
...
var get_data = {apiKey: apiKey, token: token};
$.get('http://service.com/api/<object>', get_data, function(data) {
// Do something with data
});
Извините, здесь есть несколько вопросов. Я предполагаю, что главное - сохранить ли ящик в cookie, как я могу убедиться, что он очищается, когда пользователь выходит из внешнего приложения? Или, если я не должен хранить его в файле cookie, как я могу информировать клиента о состоянии пользователя?