Я использую nodejs, express, cookie-parser и angular 6. Сейчас angular запускается в http://localhost:4200
и node / express в http://localhost:3000
. Я тоже поставил
const cors = require('cors');
app.use(cors());
в моем app.js
в узле, так что угловой и узел могут связываться.
В моем маршруте входа в систему я создаю файл cookie только для http с токеном, а затем отправляю обратно JSON с некоторой информацией и идентификатором пользователя
res.cookie("SESSIONID", token, {httpOnly:true, secure:true});
res.json({ success:true, msg:'you are logged in', userid: resolved.id});
Я полагаю, что файл cookie SESSIONID отправляется с каждым запросом обратно на сервер, поэтому мне не нужно устанавливать его перед каждым запросом
В моем промежуточном программном обеспечении я хочу получить токен из куки, чтобы проверить его. Итак, я делаю
const token = req.cookies.SESSIONID;
console.log('token from validate : ', token);
//check token and expiration, either next(); or redirect back
в моих маршрутах у меня есть
router.get('cms/account', myMiddleware.required(), (req, res)=>{
res.json({ msg:'profile data'});
});
Мой профиль сервиса связывается с учетной записью маршрута узла
import { Injectable } from '@angular/core';
import { Http, Headers } from '@angular/http';
import { map } from "rxjs/operators";
@Injectable({
providedIn: 'root'
})
export class ProfileService {
constructor(private http:Http) { }
getProfile(){
return this.http.get('http://localhost:3000/cms/account').pipe(map(res => res.json()));
}
}
мой сервис профилей должен отображать некоторые данные профиля
import { Component, OnInit } from '@angular/core';
import { ProfileService } from '../../services/profile.service';
@Component({
selector: 'app-profile',
templateUrl: './profile.component.html',
styleUrls: ['./profile.component.css']
})
export class ProfileComponent implements OnInit {
constructor( private profileService: ProfileService) { }
ngOnInit() {
this.profileService.getProfile().subscribe((data) =>{
console.log('profileService -- ', data);
})
}
}
После того, как я войду, я перехожу на http://localhost:4200/cms/profile
. В консоли вижу token from validate : undefined
Так что я уверен, что angular успешно достигает промежуточного программного обеспечения для проверки, но не может получить cookie.
Я не понимаю, почему cookie там нет. Это мой синаткс? Разве это не установлено в начале? Должен ли я включать его в каждый запрос? Это разные порты в localhost
? Я дал как можно больше подробностей, если вам нужно больше, просто скажите мне. Пожалуйста, помогите мне отладить это, потому что я потерян.
Спасибо