[英]Login Session Cookie Set via Volley
我是Android和JAVA的新用户,可以通过POST登录,但是每次打开应用程序时都必须重新登录。 即使在输入后触摸返回按钮,也可以返回登录页面。
如何添加Cookie?
我找到了很多代码并进行了尝试,但是我在Android Studio(构建)中遇到了错误
登录活动:
package com.example.com
import android.content.Intent;
import android.graphics.Typeface;
import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;
import android.view.View;
import android.widget.Button;
import android.widget.EditText;
import android.widget.TextView;
import android.widget.Toast;
import com.android.volley.AuthFailureError;
import com.android.volley.Response;
import com.android.volley.VolleyError;
import com.android.volley.toolbox.StringRequest;
import com.android.volley.toolbox.Volley;
import org.json.JSONArray;
import org.json.JSONException;
import java.util.HashMap;
import java.util.Map;
public class GirisAktivitesi extends AppCompatActivity {
TextView signup, yaziuyegirisi;
EditText username, userpassword;
Button btnLogin;
private static final String loginUrl = "URL";
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_giris);
yaziuyegirisi = findViewById(R.id.yaziuyegirisi);
username = findViewById(R.id.username);
userpassword = findViewById(R.id.userpassword);
signup = findViewById(R.id.usersignup);
btnLogin = findViewById(R.id.btnUserLogin);
signup.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
Intent intent = new Intent(GirisAktivitesi.this, YeniKayitAktivitesi.class);
startActivity(intent);
}
});
btnLogin.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
userLogin();
}
});
}
public void userLogin() {
StringRequest request = new StringRequest(StringRequest.Method.POST, loginUrl, new Response.Listener<String>() {
@Override
public void onResponse(String response) {
try {
JSONArray jsonResponse = new JSONArray(response);
String registerResultString = jsonResponse.getJSONObject(0).getString("status");
String registerMessageString = jsonResponse.getJSONObject(0).getString("message");
if (registerResultString.equals("true")) {
Toast.makeText(getApplicationContext(), "Sorgulanıyor..", Toast.LENGTH_LONG).show();
Intent intent = new Intent(getApplicationContext(), DashboardAktivitesi.class);
startActivity(intent);
} else {
Toast.makeText(getApplicationContext(), "Entered is unfortunately incorrect", Toast.LENGTH_LONG).show();
}
} catch (JSONException e) {
e.printStackTrace();
}
}
}, new Response.ErrorListener() {
@Override
public void onErrorResponse(VolleyError error) {
}
}) {
@Override
protected Map<String, String> getParams() throws AuthFailureError {
Map<String, String> params = new HashMap<>();
params.put("email", username.getText().toString().trim());
params.put("password", userpassword.getText().toString().trim());
return params;
}
};
Volley.newRequestQueue(this).add(request);
}
}
您当前使用的是基本身份验证方法,每次登录时都需要向服务器发送用户名和密码。 这迫使您每次发送登录请求以与服务器通信。
如果您需要使用加密令牌保存到某处并使用它来授权您的请求,则应该使用OAuth2授权系统。 该系统使用加密的访问令牌发出授权请求,这比将用户名和密码保存在应用程序中的某个位置要安全得多。 并且当令牌过期时,您可以使用加密的刷新令牌来构建一个新的令牌 。
因此,从技术上讲,您不需要新的登录名,直到用户在另一个客户端上更改其密码,这将迫使用户在尝试使用刷新令牌来构造新的访问令牌时以新密码重新登录。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.