【发布时间】:2015-03-18 01:07:07
【问题描述】:
我正在使用电子邮件和密码。我已创建用户并验证用户,但我不知道如何为该用户添加会话。
例如,如果用户登录到他/她的帐户。当他们不想使用应用程序时,他/她可以在手机上删除应用程序的进程,然后摆脱应用程序的进程并且会话应该仍在进行中,因此当他们回到他们的应用程序时,他们应该仍然登录直到他/她注销(未授权)。
我在为已登录用户创建会话时遇到问题。我认为必须使用令牌,但我不知道应该如何使用它。
登录活动:
Firebase user_data = new Firebase("https://myapp.firebaseio.com");
user_data.authWithPassword(login_email.getText().toString(), login_pwd.getText().toString(), new Firebase.AuthResultHandler() {
@Override
public void onAuthenticated(AuthData authData) {
System.out.println("User ID: " + authData.getUid() + ", Provider: " + authData.getProvider());
Toast.makeText(getBaseContext(), "Login success!", Toast.LENGTH_LONG).show();
Intent toMainActivity = new Intent(getApplicationContext(), MainActivity.class);
startActivity(toMainActivity);
}
@Override
public void onAuthenticationError(FirebaseError firebaseError) {
// there was an error
System.out.println("ERROR.........................................");
}
});
这是一个简单的场景: 用户登录。(从 Login 类是 Intent 到 Main 活动类) 用户不注销但删除应用程序的进程。 后来用户决定使用该应用程序。
我的问题:当点击应用程序时,它会将用户带回登录页面,而它应该将用户带到主活动页面。
更新 - 初始化
我已经初始化它仍然没有保存登录状态。
我的问题:当点击应用程序时,它会将用户带回登录页面,而它应该将用户带到主活动页面。
这是主要活动页面:
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
Firebase.setAndroidContext(this);
setContentView(R.layout.activity_main);
Firebase user_data = new Firebase("https://myapp.firebaseio.com");
user_data.addAuthStateListener(new Firebase.AuthStateListener() {
@Override
public void onAuthStateChanged(AuthData authData) {
if (authData != null) {
System.out.println("Authentication is currently working"); //this did print
} else {
System.out.println("Failed authentication");
}
}
});
AuthData authData = user_data.getAuth();
if (authData != null) {
System.out.println("The state is: " + authData); //this did print
} else {
System.out.println("Failed");
}
我检查了身份验证,它们似乎没问题,但是当我在 Main Activity 登录后删除进程时,它会在我重新加载应用程序时跳回登录页面。
以上auth数据监控结果:
工作授权
身份验证当前正在工作
状态
状态为:AuthData{uid='simplelogin:3', provider='password', token='***', expires='1426758087', auth='{provider=password, uid=simplelogin:3 }', providerData='{email=du16493@gmail.com, isTemporaryPassword=false}'}
身份验证当前正在工作
已解决
如果身份验证当前正在运行,只需添加 Intent,当应用在您调用的第一个 Activity 时首次加载到您的手机上时,它应该直接返回到 Main Activity。
这是登录活动页面:
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
Firebase.setAndroidContext(this);
setContentView(R.layout.activity_main);
Firebase user_data = new Firebase("https://myapp.firebaseio.com");
user_data.addAuthStateListener(new Firebase.AuthStateListener() {
@Override
public void onAuthStateChanged(AuthData authData) {
if (authData != null) {
System.out.println("Authentication is currently working"); //this did print
Intent toMainActivity = new Intent( getBaseContext(), MainActivity.class);
startActivity(toMainActivity);
} else {
System.out.println("Failed authentication");
}
}
});
AuthData authData = user_data.getAuth();
if (authData != null) {
System.out.println("The state is: " + authData); //this did print
} else {
System.out.println("Failed");
}
【问题讨论】:
-
您能详细说明您的问题吗?你问的不是很清楚。
-
所以我想为登录用户创建一个会话。举个例子。假设我用我的 Android 手机登录,但不想使用这个应用程序,所以我点击主页按钮并删除应用程序的进程。后来我决定使用这个应用程序,所以当我打开应用程序时,它仍然应该登录,但它不是来自我上面给出的代码。
-
如上所述,身份验证再次被成功提取,但
authStateListener中没有包含任何类型的代码来显示当前活动、UI 等的任何类型的更改。你是记录身份验证。状态并显示会话已恢复,但您在哪里显示或隐藏登录表单? -
我不知道如何隐藏登录,它是内置的android代码吗?那么我是否必须在 authstatelistener 中隐藏登录表单?
-
是的,没错 - 您需要根据身份验证状态让您的代码适当地显示或隐藏登录表单。
标签: java android session firebase