2017-11-26 2 views
0

나는 Angular와 JWT을 인증 자로 사용합니다.로그 아웃하고 로그인 Angular 5 JWT가 가능한 데이터 누출 가능성

로그인하면 token이 표시되며 앱에 액세스 할 때 사용됩니다.

로그 아웃 - 토큰을 localStorage에서 제거합니다.

다시 로그인했지만 사용자가 다른 경우 사용자 -> 나는 처음 로그 아웃 한 적이없는 것처럼 이전에 시작한 사용자의 세부 정보 및보기를 가져옵니다. 이전 사용자와 관련된 모든 것을 볼 수있게 해주 며, 서버의 액션 가드와 만나는 경우에만 허용 된 작업 만 커밋 할 수 있습니다.

내가 으로 새로 고침되면 이전 사용자의 잔여 물이없고 현재 로그인 한 사용자의 올바른보기로 앱을 사용할 수 있습니다.

물론 로컬 스토리지 지우기 외에도 로그 아웃 방법에 href="/"을 추가하여이 문제를 신속하게 해결할 수 있습니다.

그러나 알려진 해결책이 있는지 궁금 해서요. 또는 알려진 문제 일 수도 있습니다.

LOGIN 방법 :

exports.login = function(req, res, next) { 
    User.findOne({email: req.body.email}, function(err, user) { 
    if (err) { 
     return res.status(500).json({ 
     title: 'An error occured', 
     error: err 
     }); 
    } 
    if (!user) { 
     return res.status(500).json({ 
     title: 'Login failed', 
     error: {message: 'Invalid login credentials'} 
     }); 
    } 
    if (!bcrypt.compareSync(req.body.password, user.password)) { 
     return res.status(401).json({ 
     title: 'Login failed', 
     error: {message: 'Invalid login credentials'} 
     }); 
    } 
    var token = jwt.sign({user: user._id}, app.get('shhhhh'), {expiresIn: 86400}); // Expires in 24 hours 
    res.status(200).json({ 
     message: 'Successfully logged in', 
     token: token, 
    }); 
    }); 
}; 

LOGOUT 방법이 이제 해결

logout() { 
    localStorage.clear(); 
    this.router.navigate(['/']); 
} 
+0

인가 다음 새로 고침 할 때까지 다시 시작되지 않은 생성자에 로그인을 넣어 -

는 (문제의 뿌리를 추적 이 공개 프로젝트를 공유 할 수 있습니까? 복제하고 자세히 살펴 보는 것이 좋을 것입니다. 이러한 문제는 여러 가지 이유로 발생할 수 있습니다. 어쨌든, 내 첫 번째 의심은 프론트 엔드와 백엔드 모두에서 토큰을 유지하고 제거하는 방법 일 것입니다 –

+0

안녕하세요, Chau, 답장을 보내 주셔서 대단히 감사합니다.나는 그것이 상업적인 것만 큼 전적으로 공유 할 수 없습니다. 그런 다음 LS에서 토큰을 제거하는 로그 아웃 메소드를 추가하여 더 이상 허용되지 않게합니다. –

+0

로그인 및 로그 아웃 서비스 만 필요합니다 –

답변

0

.

<app-header *ngIf="isAuthenticated()"></app-header> 
<app-welcome *ngIf="!isAuthenticated()"></app-welcome> 
<app-body *ngIf="isAuthenticated()"></app-body> 

그래서 내가 만든 : 그것에 의존한다 나의 전체보기 등 -은 "IsAuthenticated는"방법은 내가 만든 한 모든 갑작스러운 움직임에 백그라운드에서 실행 유지 -

나는 내 정식 서비스에 나타났습니다 공공 token 변수와 나는 일단 토큰했다 -이 날 수 있도록 도움

isAuthenticated() { 
    if (localStorage.getItem('token') === null) { 
    return false; 
    } else { 
    const token = localStorage.getItem('token'); 
    try { 
     const decoded = jwtDecode(token); 
     return {id: decoded.id} 
     this.token = '?token=' + token; // this is evetually what I added 
     return true; 
    } catch (err) { 
     console.log(err); 
     this.logout(); 
    } 
    } 
} 

을 확인 내 토큰 값이 모든 움직임을 체크 인증에 따라 부착 또는하지 않은 중 하나.

은 그 때 나는 PARAM으로 토큰을 사용하여 내 다른 모든 서비스에이 인증 서비스를 주입

는 EX 모든 요청을 똑바로 액세스 : 이제

getProfile() { 
    return this.http.get('http://localhost:3000/api/user' + this.auth.token) 
     .map((response: Response) => response.json()) 
     .catch((error: Response) => Observable.throw(error.json())); 
    } 

, 다행히도, 나는 데이터를 얻을 수 데이터 유출없이 처음부터 곧바로 로그인하려는 사용자의 내가 필요한 모든 HTTP 서비스에 대한 token 개인 변수를 사용하고,

관련 문제