2017-07-18 11 views
0

私はユーザー認証をしようとしていますが、自分のテンプレートで何か問題があると思います。私は郵便配達員とそれを試してみるとうまくいきます。まず、/ users/authenticateへのAPI呼び出しを行い、トークンを取得します。トークンを取得した後、/ users/meに別のAPI呼び出しを行って確認します。それはで、ユーザーがログインに成功しているテンプレートからデータを取得できず、コントローラに渡すことができませんAngularjs

これは私のコントローラである:。

.controller('homeCtrl', ['$rootScope', '$location', '$http', '$timeout', 'Auth', function ($rootScope, $location, $http, $timeout, Auth) { 
    $rootScope.loadme = false; 
    $rootScope.currentPa = $location.path(); 
    $rootScope.$on('$routeChangeStart', function() { 
     if (Auth.isLoggedIn()) { 
      console.log('Success: User is logged in'); 
      $rootScope.isLoggedIn = true; 
      Auth.getUser() 
       .then(function (data) { 
        $rootScope.username = data.data.username; 
        $rootScope.email = data.data.email; 
        $rootScope.loadme = true; 
       }); 
     } else { 
      $rootScope.isLoggedIn = false; 
      $rootScope.username = ''; 
      $rootScope.loadme = true; 
     } 
    }); 


    $rootScope.doLogin = function (loginData) { 
     $rootScope.loading = true; 
     $rootScope.errorMsg = false; 
     console.log("TEST LOGIN"); 

     Auth.doLogin($scope.loginData) 
      .then(function (data) { 
       console.log('logging in'); 
       if (data.data.success) { 
        console.log('fgsgsg'); 
        $rootScope.loading = false; 
        $rootScope.successMsg = data.data.message + 'Redirecting...'; 
        $timeout(function() { 
         console.log('12345'); 
         $location.path('/#!/'); 
         $rootScope.loginData = ''; 
         $rootScope.successMsg = false; 
        }, 2000); 
       } else { 
        console.log("no success"); 
        $rootScope.loading = false; 
        $rootScope.errorMsg = data.data.message; 
       } 
      }) 
    }; 

これらは、サーバーのルートやミドルウェアです:

//User Login Route 
router.post('/authenticate', function (req, res) { 
User.findOne({username: req.body.username}) 
    .select('username email password') 
    .exec(function (err, user) { 
     if (err) { 
      throw err; 
     } 

     if (!user) { 
      res.json({success: false, message: 'Could not authenticate 
user'}); 
     } else if (user) { 
      if (req.body.password) { 
       var validPassword = 
user.comparePassword(req.body.password); 
      } 
      else { 
       res.status(200).json({success: false, message: 'Please 
provide password'}) 
      } 
      if (!validPassword) { 
       res.status(200).json({success: false, message: 'Could 
not authenticate password'}); 
      } else { 
       var token = jwt.sign({username: user.username, email: 
user.email}, secret, {expiresIn: '24h'}); 
       res.status(200).json({success: true, message: 'User 
authenticated', token: token}); 
      } 
     } 
     console.log(user); 
    }); 
}); 


//Middleware for decoding tokens 
router.use(function (req, res, next) { 
var token = req.body.token || req.body.query || req.headers['x-access- 
token']; 

if (token) { 
    jwt.verify(token, secret, function (err, decoded) { 
     if (err) { 
      res.json({success: false, message: 'Token Invalid'}) 
     } else { 
      req.decoded = decoded; 
      next(); 
     } 
    }); 
} else { 
    res.json({success: false, message: 'No token provided'}); 
} 
}); 

router.post('/me', function (req, res) { 
    res.send(req.decoded); 
}); 

そして最後に、これはテンプレートです:

<div ng-controller="homeCtrl"> 
     <form ng-submit="doLogin(loginData)"> 
      <label>Username:</label> 
      <input class="form-control" type="text" name="username" placeholder="please enter username" 
        ng-model="loginData.username"> 
      <br> 
      <label>Email:</label> 
      <input class="form-control" type="text" name="email" placeholder="please enter email" 
        ng-model="loginData.email"> 
      <br> 
      <label>Password:</label> 
      <input class="form-control" type="password" name="password" placeholder="please enter password" 
        ng-model="loginData.password"> 
      <br> 
      <button class="btn btn-primary" type="submit" formmethod="post">Login</button> 
     </form> 
+1

dologin関数でloginDataを渡す必要はありません。ステートメント$ scope.loginData = {}を追加するだけです。データをコンソールに記録するかどうかを確認するために、呼び出されたときにdoLogin()で印刷してみてください。 – Kamesh

+0

それは働いた。本当にありがとう! – XhensB

答えて

1

dologin関数でloginDataを渡す必要はありません。ステートメント$ scope.loginData = {}を追加するだけです。データをコンソールに記録するかどうかを確認するために、呼び出されたときにdoLogin()で印刷してみてください。

関連する問題