android - Android 登录验证 API
问题描述
我通过 api 使用令牌进行了简单的登录,我从服务器获取令牌并将其保存到 SharedPreferences。我的问题是我现在应该做什么,我的想法是检查用户是否有令牌然后跳过登录过程。我的 MainActivity.java 中有登录逻辑,就在 onCreate 中,我知道它不应该在那里,但我应该在哪里设置它?
这就是我从服务器获取响应并保存它的方式
User user = response.body();
if (user != null) {
int id = user.getId();
String name = user.getName();
String lastname = user.getLastname();
String maidenname = user.getMaidenname();
String card = user.getCard();
String scard = user.getScard();
String email = user.getEmail();
String token = user.getToken();
User current = new User(id, name, lastname, maidenname, card, scard, email, token);
SharedPreferences sharedPreferences = getSharedPreferences(SHARED_PREFS, MODE_PRIVATE);
SharedPreferences.Editor editor = sharedPreferences.edit();
editor.putString(TOKEN, current.getToken());
editor.apply();
我为当前登录的用户创建了一个用户模型,我应该将它保存在其他地方还是以后如何从所有活动中访问它?
有什么建议么?
解决方案
如果您想存储一些用户信息并从任何活动中访问它,我认为最好的方法是将其存储在 SharedPreferences 中并创建一个帮助类来获取和设置这些值在首选项中。例如:
public class SharedPreferencesHelper {
private static final String USER_ID = "USER_ID";
private static final String USER_NAME = "USER_NAME";
private static final String USER_LAST_NAME = "USER_LAST_NAME";
//.... etc for all User members
private static SharedPreferences getSharedPreferences(Context context) {
return PreferenceManager.getDefaultSharedPreferences(context);
}
public static User getUser(Context context) {
SharedPreferences sp = getSharedPreferences(context);
int id = sp.getInt(USER_ID, -1);
String name = sp.getString(USER_NAME, null);
String lastName = sp.getString(USER_LAST_NAME, null);
// etc for all User members
return new User(id, name, lastName, ....);
}
public static void setUser(Context context, User user) {
if (user != null) {
SharedPreferences.Editor() editor = getSharedPreferences(context).edit();
editor.putInt(USER_ID, user.getId());
editor.putString(USER_NAME, user.getName());
editor.putString(USER_LAST_NAME, user.getLastName());
... (etc, for all user class members)
editor.apply();
}
}
// the remove method you could use, for example, if users logs out
public static void removeUser(Context context) {
SharedPreferences.Editor() editor = getSharedPreferences(context).edit();
editor.remove(USER_ID);
editor.remove(USER_NAME);
// etc for all user members stored in SharedPreferences
editor.apply();
}
}
可以从应用程序中的任何活动调用此类方法。我相信这是存储和检索此类值的最安全方式。您只需在用户登录和注销时小心正确地删除和存储这些信息。
我希望这有帮助!如果您有任何其他问题,请随时补充(并请发布您的完整代码)。
推荐阅读
- visual-studio-code - VScode - 如何粘贴缩进的列
- python - 覆盖图像代码需要python中的一些for循环
- python - 在 Geocoder Google 或 Yandex API 上计算两个地理位置之间的坐标
- python - 具有可变间距的字符
- api - 如何验证响应它不是空白
- google-cloud-vision - 一次从本地存储读取多个 pdf 文件
- awk - AWK;日期之间的差异
- amazon-web-services - AWS下部署Vue+Springboot应用的问题(Elastic Beanstalk)
- git - 在 TortoiseSVN 中使用 github 个人访问令牌
- python - 使用python3从字符串中删除定义的字符