Передача данных/переменной, объявленной из данных HTTP-запроса, другому контроллеру представления

#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, так как это быстро и просто. Брелок — это скорее штука на всю жизнь. Чего я бы не советовал для идентификатора пользователя, но, возможно, если они захотят сохранить свой пароль.