Ionic Framework和Firebase持久性Auth

时间:2016-02-25 20:19:28

标签: authentication ionic-framework firebase ng-storage

我想知道是否有人使用过离子和firebase并允许持久身份验证。当我创建IPA / APK并将应用程序下载到我的设备时,每次关闭应用程序时我都必须再次登录。

使用$ authWithPassword登录后,回调包括uid和token。如果我使用get import ngStorage作为依赖项,我如何使用uid和token来持久授权?

对于登录,用户登录调用登录功能,该功能链接到我工厂的Auth.login功能。

    login: function(user) {
        return auth.$authWithPassword({
            email: user.email,
            password: user.password
        }, function(error, authData) {
            switch(error.code) {
                case "INVALID_EMAIL":
                    console.log("Log in with a valid email.");
                    break
                case "INVALID_PASSWORD":
                    console.log("Password or email is incorrect");
                    break
                default:
                    console.log("Enter a valid email and password");
            }
        })
        .then(function(authData) {
            console.log("login: Logged in with uid: ", authData);
            $localStorage.uid = authData.uid;
            $localStorage.token = authData.token;

        })
        .catch(function(error) {
            alert("Error: " + error);
        });

我不确定如何使用uid和token持久进行身份验证。没有用户密码可以做到吗?

提前感谢您的帮助。

1 个答案:

答案 0 :(得分:3)

我确实在很久以前找到了答案,但忘了在这里更新。希望它对使用firebase auth和离子框架的人有用。

如问题部分所示,只需确保在登录时保存令牌。这应该适用于firebase提供的社交媒体登录。

当我第一次尝试作为第一次开发时,对我自己并不明显,但每次打开应用程序时,都可以使用保存的令牌登录用户。

在离子应用程序的.run()部分,注入$ localStorage,$ firebaseAuth和$ state添加以下内容:

if($localStorage.token) {
  var token = $localStorage.token;

  var ref = new Firebase('https://yourfirebaselink.firebaseio.com/');

    var auth = $firebaseAuth(ref);

  auth.$authWithCustomToken(token, function(error, authData) {
    if (error) {
      console.log("Authentication Failed!", error);
    } else {
      console.log("Authenticated successfully with payload:", authData);
    }
  }).then(function(authData) {
    $state.go('main');
    return true;
  }).catch(function(error) {
    console.log("Please sign in", error);
    delete $localStorage.uid;
    delete $localStorage.token;
  });

} else {
  $state.go('login');
  console.log('not logged in');
}

总之,如果有一个令牌保存到localstorage,请使用它来使用firebases $ authWithCustomToken()登录。