如何在Firebase 3.0中注销用户?

时间:2016-05-22 16:22:01

标签: javascript firebase firebase-authentication

根据documentation,我强制用户使用signOut()方法退出。

这就是我的尝试:

var rootRef = firebase.database().ref();
var loggedInUser = firebase.auth();

1. firebase.signOut(); 
2. loggedInUser.signOut(); 
3. rootRef.signOut();
4. signOut();
5. firebase.auth.signOut();

我为上述五个中的每一个获得... is not a function。我知道我对新Firebase的引用没有问题,因为firebase.database().ref();firebase.auth();不会引发错误。我还在控制台中迁移了应用程序。

5 个答案:

答案 0 :(得分:76)

在JavaScript中,您可以使用以下命令注销用户:

firebase.auth().signOut().then(function() {
  console.log('Signed Out');
}, function(error) {
  console.error('Sign Out Error', error);
});

答案 1 :(得分:5)

firebase.auth().signOut()

只是它对我有用!

答案 2 :(得分:1)

我不知道我是否正确理解,但如果您要签署每个登录的用户: 由于代码在客户端上运行,因此无法实现,而auth状态是指运行它的客户端。

您无法访问连接到firebase身份验证服务的每个客户端,因为这意味着在服务器端运行代码。

但是,可以选择指定会话的持续时间,即auth部分中的记住参数。

答案 3 :(得分:1)

有多种方法可以退出用户:

<强> 1。 FirebaseUI: Refarence

添加附加费:

dependencies {
    implementation 'com.firebaseui:firebase-ui-auth:4.0.0'
}

然后:

public void onClick(View v) {
if (v.getId() == R.id.sign_out) {
    AuthUI.getInstance()
        .signOut(this)
        .addOnCompleteListener(new OnCompleteListener<Void>() {
            public void onComplete(@NonNull Task<Void> task) {
                // user is now signed out
                startActivity(new Intent(MyActivity.this, SignInActivity.class));
                finish();
            }
        });
    }
}

<强> 2。 Kotlin: Referance

使用Android默认身份验证依赖项,例如: com.google.firebase:firebase-auth:16.0.1

firebase.auth().signOut().then(function() {
  // Sign-out successful.
}).catch(function(error) {
  // An error happened.
});

第3。默认使用java:

使用Android默认身份验证依赖项,例如: com.google.firebase:firebase-auth:16.0.1

FirebaseUser user = mAuth.getCurrentUser();
if (user != null){
    mAuth.signOut();
    Toast.makeText(this, user.getEmail()+ " Sign out!", Toast.LENGTH_SHORT).show();
}else{
    Toast.makeText(this, "You aren't login Yet!", Toast.LENGTH_SHORT).show();
}

答案 4 :(得分:1)

扩展@Frank van Puffelen的答案,此代码的工作原理很吸引人,但是在@Service public class SomeService implements FilteredResultsService { @Autowired SomeDao someDao; @Override public List<SomeEntity> getFilteredResults(Filter filter, Integer size) { return this.someDao.findAll(filter, PageRequest.of(0, size)).getContent(); } } 函数中将拒绝处理作为第二个参数,这是一种不好的做法。

而是添加一个// a Map of Spring beans of type FilteredResultsService, where // the key is the name of the bean and the value is the bean object @Autowired private Map<String, FilteredResultsService> serviceBeans; @PostMapping(value = "method-call/{serviceName}", produces = MediaType.APPLICATION_JSON_VALUE) public Object executeMethod(@PathVariable("serviceName") String serviceName, @RequestBody Filter filter, @RequestParam(required = false) Integer size) { FilteredResultsService service = serviceBeans.get(serviceName); if (service == null) { // invalid serviceName, throw an error } return service.getFilteredResults(filter, size); } 块。

因为,如果在from collections import Counter def elem_max(tup): b= Counter(tup) out=max(b.items(),key=lambda x:x[1]) if(out[1] ==1): return 0 else: return out[0] 函数中发生错误,则将对其进行处理,但是如果在tup1 = (1,-1,1) tup2 = (1, 0, -1) print(elem_max(tup1)) # 1 print(elem_max(tup2)) # 0 块中发生错误,则将不对其进行处理。

更好的代码是

then()