Я думал об этом в последнее время, и я думаю, что у меня есть эффективное решение. Я ничего не знаю о Rails, но идея должна быть передана. У меня есть только опыт в Mongo для базы данных, так что несите меня.
Каждое устройство имеет уникальный идентификатор, который можно получить в Кордове с помощью устройства. (from the Cordova plugin) или getUUID() (if you're using ngCordova). Этот идентификатор гарантированно будет уникальным для каждой платформы, хотя он, вероятно, будет уникальным для всех, поэтому вы должны добавить платформу и модель в свой уникальный идентификатор для хорошей оценки.
var deviceId = device.platform + device.model + device.uuid;
Теперь мы создали поистине уникальный идентификатор, который никогда не изменится, и вам не придется иметь дело с местным хранилищем.
Теперь представьте, что у вас есть коллекция или таблица устройств в вашей базе данных, которые выглядят примерно так со следующими парами ключ-значение.
{
device: DEVICEID;
loggedIn: true;
userId: USERID;
}
Теперь, когда приложение запускается захватить DeviceId из устройства и отправить его на сервер, чтобы найти его. Это, вероятно, будет отличаться для вас, просто простой поиск по ключевым словам.
var result = Devices.find({device: deviceId}).fetch();
В Mongo это вернет массив результатов, однако должен быть только один результат. Теперь мы проверяем, были ли они ранее зарегистрированы и захватили userId.
var loggedIn = result[0].loggedIn;
var user = result[0].userId;
Если они были выведены из системы раньше или не были получены, отправьте их на страницу входа в систему. Если они вошли в систему, запустите обычные процедуры входа в систему. Идентификатор пользователя может быть своего рода указателем на объект в другой коллекции.
Так я думаю, что я сделаю это, иначе у вас может быть объект пользователя с идентификатором устройства в качестве ключа, но у пользователя может быть несколько устройств, поэтому он должен быть массивом ключей, m не уверен, как искать это прямо сейчас. Добавление новых устройств будет таким же простым, как добавление уникального идентификатора в коллекцию и указание его пользователю.
Каждый раз, когда приложение открывается, оно проверяет идентификатор устройства и показывает, зарегистрирован ли пользователь на устройстве. Вы можете показать заставку, пока это происходит.
Теперь, если пользователь выбирает выход из настроек, вы можете обновить базу данных, чтобы отразить это, и в следующий раз, когда они перейдут в приложение, они будут выведены из системы.
Надеюсь, мои мысли могут быть полезными.
EDIT: Я думал, что было бы лучше удалить объект устройства из коллекции каждый раз, когда они выходят из системы вместо того, чтобы просто устанавливать loggedIn, таким образом, если они избавляются от устройства, он не останется в вашей коллекции. Я не уверен, что удаление объектов часто будет влиять на производительность базы данных, но пользователи не слишком часто выходят из устройства, насколько я могу судить, поэтому это не должно быть слишком большой проблемой.
Это приводит к еще одному признаку использования используемых устройств. Это простое средство, но каждый раз, когда пользователь регистрируется на уже существующем устройстве, обновляйте ключ userId новому пользователю, если он изменился.
ДАЛЬНЕЙШИЕ ИЗОБРАЖЕНИЯ (потому что я не могу прокомментировать): На локальном хранилище/кешировании и почему это опасно. Единственное, что вы могли бы в локальном хранилище автоматически регистрировать кого-либо в автоматическом режиме, - это учетные данные учетной записи, которые являются очень конфиденциальной информацией и никогда не должны храниться локально (пароли не должны храниться удаленно, но хеширование - отдельный вопрос). Вы никогда не сохранили бы свой пароль в кеше, вы могли бы составить какой-то секретный ключ и хранить его, но все, что доступно локально, может быть прочитано кем-то и потенциально реплицировано на другое устройство. Информация об идентификаторе устройства будет намного сложнее подделать.
использование localStorage.After логин установить имя пользователя и пароль в LocalStorage и очистить его, когда вышли из системы. Если вы не выходите из системы и не убиваете приложение при каждом входе в систему, проверьте, что значение ключа localStorage пусто или нет, а затем перейдите на страницу. – Banik
Вы не должны использовать localStorage ... было бы намного проще использовать базу данных WebSQL из-за подключения к вашей веб-базе данных. – Sithys
@Sithys Хорошая идея, но, к сожалению, WebSQL устарел: http://programmers.stackexchange.com/questions/220254/why-is-web-sql-database-deprecated –