我有一個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令牌。 –