У меня есть Flask REST API для сервера и угловой для клиента.
Я пытаюсь сохранить маркеры OAuth Facebook для использования API Facebook на сервере. Поэтому я решил реализовать авторизацию на стороне сервера через Facebook OAuth, чтобы получить токен пользователя, зарегистрироваться и сгенерировать новый токен JWT для моего серверного приложения.
Используя Flask-Dance, я реализовал функцию обратного вызова, поэтому, если я вызываю server_host / login / facebook, он перенаправляет меня на страницу авторизации facebook, а при успешной авторизации он перенаправляет на server_host / login / authorised, где я регистрирую пользователя, если необходимо, сохраняю Facebook токен, сгенерируйте для него собственный сервер JWT и верните его.
Что делает мой angular, так это открывает новое окно (window.open ()) с адресом server_host / login / facebook и после авторизации я вижу свой ответ JWT. Но как закрыть это окно при успешном входе в систему и заставить этот JWT сохранять в угловом приложении?
Мой подход похож на
CORS - Facebook - Паспорт
и это
Могу ли я использовать гранты с кодом авторизации для SPA, тесно связанного с API (которым я владею)? .
Я тихий новичок в этом. Может быть, я чего-то не понял. Но я не знаю, как получить мой токен JWT в моем угловом приложении.
На стороне сервера (фляга-танец, JWT)
login_bp = make_facebook_blueprint(
client_id="my_client_id",
client_secret="my_secret",
scope="instagram_basic,instagram_manage_comments"
)
login_bp.storage = SQLAlchemyStorage(OAuth, db.session, user=get_jwt_identity)
# create/login local user on successful OAuth login
@oauth_authorized.connect_via(login_bp)
def facebook_logged_in(blueprint, token):
# getting response info, register etc.
access_token = create_access_token(identity=oauth.user.nickname)
return jsonify({'access-token': access_token})
Что теперь делает мой угловой компонент:
@Component({
selector: 'app-auth',
templateUrl: './auth.component.html',
styleUrls: ['./auth.component.css']
})
export class AuthComponent implements OnInit {
constructor() { }
ngOnInit() { }
login() {
const w = window.open('https://localhost:5000/login/facebook', 'authWindow', 'location=0,width=300,height=214');
}
}