#ios #swift
Вопрос:
Краткие сведения:
В моем контроллере представления входа в систему для моего первого экрана я настроил его так, чтобы, когда пользователь нажимает «Войти», он запускал функцию, которая вводит имя пользователя и пароль и отправляет их в мой сервер с помощью HTTP-запроса. Затем из этого запроса в этой функции в ответном ответе в данных содержится «идентификатор пользователя». Мне нужно каким-то образом установить «идентификатор пользователя», который возвращается в переменную, чтобы я мог использовать его во всем приложении. Например, всякий раз, когда я делаю какие-либо запросы в приложении, мне нужно, чтобы «идентификатор пользователя» подключался к URL-адресам для получения данных для учетной записи пользователя. Я включу фрагменты кода.
Это первое из моей функции входа в систему. Как вы можете видеть из последней печати, именно так нужно выполнить синтаксический анализ, чтобы получить «идентификатор пользователя» из ответа.
let decoder = JSONDecoder()
let loginResponse = try decoder.decode(LoginResponse.self, from: json)
print(loginResponse.data)
print(loginResponse.data.id)
Это следующее из примера, где мне нужно взять этот «идентификатор пользователя» и подключить его к URL-адресу для другого HTTP-запроса в другом файле.
let resourceString = "https://*******.herokuapp.com/(userID)/allergies"
guard let resourceURL = URL(string: resourceString) else {fatalError()}
Любая помощь будет очень признательна и даст мне знать, если мне понадобится предоставить дополнительную информацию.
Комментарии:
1. Это звучит как интересная тема. И будет намного лучше, если вы покажете, что такое парень по имени LoginResponse и как вы запускаете то, что вы так называете этой функцией.
2. вы должны использовать Coredata, пользователя по умолчанию или брелок для ключей, чтобы сохранить идентификатор пользователя, и поэтому, когда вы делаете новый запрос, вам необходимо добавить идентификатор пользователя.
Ответ №1:
Да, вы можете сохранить маркер доступа или идентификатор пользователя в Userdefaults и проверить, вошел ли пользователь в систему или нет, или использовать его в следующем запросе
UserDefaults.standard.set(loginResponse.data.id, forKey: "userId")
Чтобы получить его, используйте
let userId = UserDefaults.standard.value(forKey: "userId")
Комментарии:
1. Это сработало! Спасибо
2. пожалуйста, проголосуйте.!!
Ответ №2:
Обычно у вас больше возможностей для проверки и обеспечения безопасности для доступа к бэкенду. Например, токены аутентификации / токены на предъявителя / токены обновления. Я обычно сохраняю их в одноэлементном аутентификаторе, который используется в моем протоколе RequestBuilder.
Если вы хотите сохранить идентификатор пользователя, даже если они на некоторое время выключат приложение, то я согласен с @luffy_064, что его следует сохранить в UserDefault или CoreData.
Поскольку это всего лишь 1 ключ, я бы предпочел UserDefault, так как это быстро и просто. Брелок — это скорее штука на всю жизнь. Чего я бы не советовал для идентификатора пользователя, но, возможно, если они захотят сохранить свой пароль.