我有一个Android应用程序,其登录信息通过https发送到Java休息API,验证登录凭据,然后发回一个响应,说明登录是否成功。我的问题很简单,我应该怎么做以确保用户在重新启动应用程序时不必再次登录?Android,使用Rest API登录
回答
有很多方法可以处理一次性登录,它很大程度上取决于架构如何在服务器端实现以使其工作。出于安全原因,通常登录API是closely coupled
。让我举个例子,我的意思是closely coupled
。
当你想Login
中Mobile App
工作一次,下一次用户打开你不想再次提示与SignIn
屏用户的Mobile app
。当然您不希望将移动应用上的Username
和Password
等机密信息保存为持久数据,因为它可以从Android设备轻松获取。那你干什么。
让我们假设您通过Android Device
唯一的登录凭证deviceID
。如下所示。以下是发送到LoginAPI
{
"username": "[email protected]",
"password": "it's not a secret",
"deviceId": "123456789"
}
现在,当你不希望保存Login
凭据JSON
数据,服务器会在每次你登录到移动时生成一个随机的字母数字String
将它传递给您回应应用。
{
"Success": true,
"SuccessMessage": "credentials are correct, really!",
"ErrorMessage": null,
"Date": "dd/mm/yyyy",
"token": "1eghe4qha23aehraeh456789" // now this is a nasty String
}
你现在可以保存date
和移动应用的token
作为持久性数据。 因此,下次您的用户打开应用程序,您可以让用户绕过SignIn
屏幕,并在后台您可以通过将其发送到服务器来检查用户令牌ID是否正确,如下所示。你可以选择SharedPreferences或创建一个file,并保存有
{
"API_TYPE": "login",
"deviceId": "123456789",
"token": "1eghe4qha23aehraeh456789"
}
服务器可以检查对deviceID
此令牌ID来检查,如果这是在设备和响应正确的令牌。
您可能会问为什么我们再次检查token
,因为这是由服务器首先发送的,说明凭证是正确的。我同意你确实有一点,如果用户从网站更改密码或导致更改服务器上的令牌以更改该用户的令牌时,如果服务器拒绝由该服务提供的令牌你只需要用户再次登录。
这将确保用户在任何给定的时间点只登录到一个Android Device
。
感谢您的帮助,这似乎是我见过的最好的方法。但是,我有一个问题,在设备上存储令牌的时间太长是不是不好的做法?如果用户每次首次登录后返回应用程序,您会推荐以下方法: 1.用户打开应用程序,将存储在共享首选项中的令牌和设备ID发送到服务器 。服务器用存储在服务器上的设备ID和令牌ID来验证设备ID和令牌ID ...... –
3.然后服务器产生一个新令牌,如果步骤2成功,它就会发送一个新令牌成功消息 4.令牌ID然后在共享首选项中与从服务器接收到的新令牌更新。 会是矫枉过正?另外,你会建议做ssl的令牌检查吗? –
@BenC,你注意到你实际上在这种方法中找到了一些环形孔。你提出的建议是可以做到的,'SSL'选项也是如此。请记住我已经添加了一个'Date'键,它将作为响应由服务器提供。这个日期可以用来检查'SignIn'上次成功发生的时间,并且可以在10,20或30天后使标记无效并且要求用户再次'SignIn' –
您可以在首次登录后存储凭据。 因此,当用户重新启动应用程序时,您可以自动进行请求认证。
你可以选择是最好的选择,以存储使用文档的凭据: Data-Storage
这是简单的,但也许不是最好的方式做到这一点。
如果在auth中使用密码,请记住在存储之前进行加密。 – Adley
我有同样的problme,和我从服务器这样
{"error":0,"message":"ok","token":"7c75015e92e40511911e34752ee456e1","execute_time":"0.2723"}
一个JSON数据,所以我一直在SharedPreferences的StuToken
,当我的应用程序启动,检查StuToken
它存在,像这
Map<String, String> loginInfo = InfoUtil.getLoginInfo(MainActivity.this);
if (loginInfo != null) {
if (loginInfo.get("StuToken") != null) {
getStuInfo(loginInfo.get("StuToken"));
Toast.makeText(MainActivity.this, "登录状态", Toast.LENGTH_SHORT).show();
} else {
initIntent(LoginActivity.class);
this.finish();
}
} else {
initIntent(LoginActivity.class);
this.finish();
}
}
希望会为你工作
您可以使用共享的喜好来存储用户的价值和检查用户是否已经登录。你可以关注这个Link.
试着在你的闪屏Activity.You这个代码可以存储在sharedPrefence一个值来检查用户是否登录或没有。
public class SplashActivity extends AppCompatActivity {
private static final long TIME_OUT_MILI = 3000;
private SharedPreferences mAppPreferences;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_splash);
mAppPreferences = AppUtil.getAppPreferences(this);
new Handler().postDelayed(new Runnable() {
@Override
public void run() {
if (mAppPreferences.getBoolean("is_Logged_in", false)) {
startActivity(new Intent(SplashActivity.this, MainActivity.class));
} else {
startActivity(new Intent(SplashActivity.this, LoginActivity.class));
}
finish();
}
}, TIME_OUT_MILI);
}
}
在你LoginActivity我们做到这一点:
public class LoginActivity extends AppCompatActivity {
private SharedPreferences mAppPreferences;
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_login);
SharedPreferences.Editor editor = mAppPreferences.edit();
editor.putBoolean(Constants.SETTINGS_IS_LOGGED_IN, true);
editor.commit();
}
}
- 1. 使用Rest API登录Android中的Drupal
- 2. 如何使用rest API登录android登录facebook
- 3. Salesforce REST API登录?
- 4. Facebook登录+ Rest API
- 5. 使用wp-rest api登录wordpress网站
- 6. JIRA REST API登录使用C#
- 7. 使用Java Rest API进行PayPal登录
- 8. 使用REST API登录到Confluence表
- 9. 如何使用REST API登录到Redmine
- 10. 登录到Android的Facebook的REST API
- 11. 使用Slack Api登录,Android
- 12. REST API社会登录[express.js]
- 13. 笨REST API响应登录
- 14. REST API的瓶颈登录
- 15. REST API登录方法
- 16. DocuSign Rest API登录问题
- 17. Jira Rest API - 如何登录
- 18. Android登录API?
- 19. 在Yii2上登录的REST API调用
- 20. Javascript登录使用REST
- 21. 使用Javascript和REST登录
- 22. 使用Google+ API登录Android应用
- 23. 用Android登录使用Oauth登录Android
- 24. REST API:结合使用C#的登录信息和API动作?
- 25. 使用Api登录
- 26. Android Google API登录
- 27. 无法使用Laravel和ReactJS使用自定义REST API登录
- 28. 在Android中通过Rest Full API登录不起作用?
- 29. 从Android应用程序登录到Silex REST API
- 30. 使用Airbnb登录或API登录
你可以让你的API提供,您可以使用为将来的API请求验证用户身份验证密钥。您也可以设置此Auth令牌的有效性。有关更多信息,请阅读JSON Web令牌。 –