Angularfire,firebase JSON Web Tokens - 如何从令牌访问身份验证数据?

时间:2013-12-04 12:19:34

标签: angularjs firebase angularfire firebase-security

我在php中提供服务,返回带有自定义数据(身份验证数据)的令牌:

  include_once "FirebaseToken.php";
  $secret = "***********";
  $tokenGen = new Services_FirebaseTokenGenerator($secret);
  $token = $tokenGen->createToken(array("name" => "ADMIN"),array( admin => true));
  echo $token;

然后在角度我有登录功能:

adminlogin: function(){
  var token;
  $http.get("http://****").success(function(data){token=data;})
    .then(function(){
       var dataRef = new Firebase(FBURL);
         dataRef.auth(token, function(error) {
          if(error) {
            console.log("Login Failed!", error);
          } else {
            console.log("DISPLAY name FROM TOKEN");
          }
        });
      })

在身份验证后,我想显示来自令牌的名称。 如何从令牌访问身份验证数据?

2 个答案:

答案 0 :(得分:1)

令牌是一种简单的JWT格式。可以使用浏览器中的window.atob()对其进行解构。对于不支持atob / btoa方法的浏览器,您还可以grab a polyfill。以下代码来自this gist

// Helper function to extract claims from a JWT. Does *not* verify the
// validity of the token. 
// credits: https://github.com/firebase/angularFire/blob/master/angularFire.js#L370
function deconstructJWT(token) {
   var segments = token.split(".");
   if (!segments instanceof Array || segments.length !== 3) {
      throw new Error("Invalid JWT");
   }
   var claims = segments[1];
   return JSON.parse(decodeURIComponent(escape(window.atob(claims))));
}

这是一个使用这种方法构建和解构Firebase令牌的小提琴,为您提供一个工作示例和一个简单的测试工具:

http://jsfiddle.net/katowulf/D4YL8/embedded/result/

答案 1 :(得分:0)

几个小时后,我知道答案。我将angularFire与Firebase混合使用。

应该是这样的:

adminlogin: function(){
var token; var dataRef;
      $http.get("http://localhost/rubinki/php/").success(function(data){token=data;})
      .then(function(){
        angularFireAuth.login(token);
      })
    }

然后如果你有一个正确初始化的angularFireAuth方法,例如:

angularFireAuth.initialize(new Firebase(FBURL), {scope: $rootScope, name: 'auth');

您可以从以下视图访问身份验证数据:

{{auth.d.email}}

来自令牌的所有数据都在auth.d。