Stas
Ребятки, столкнулся с проблемой, в ноде через паспорт при авторизации через гугл выдаёт ошибку связанную с заголовком. Без ангуляра всё норм пропускает. Кто-то мб сталкивался и знает что там в ангуляре нужно добавить?
не
Слишком мало входных данных, искаженный контекст получаеться
Stas
не
это мне ответ?
Прошу прощения Stas, да, мало инфы для понимания четко, вопроса
Stas
Прошу прощения Stas, да, мало инфы для понимания четко, вопроса
Я честно не знаю что добавить, ангуляр тут участвует только в вызове роута. Но не хватает какого-то заголовка. С идентичным кодом на ноде без ангуляра, выдает гугл форму для входа, с ангуляром выдаёт ошибку.
let loginGoogle = () => {
return $http.get(`/api/auth/google`);
};
Вот ошибка
Failed to load https://accounts.google.com/o/oauth2/v2/auth?response_type=code&redirect_uri=http%3A%2F%2Flocalhost%3A3000%2Fauth%2Fgoogle%2Fredirect&scope=profile%20email%20openid&client_id=1060656164349-rpch2ibsm97k8kkc390bbv5m419g0g4h.apps.googleusercontent.com: No 'Access-Control-Allow-Origin' header is present on the requested resource. Origin 'http://localhost:3000' is therefore not allowed access.
не
Ну вот, теперь вопрос начал принимать хоть какие то краски)))
Access-Control-Allow-Origin - это ключ к успешному ответу
Stas
Вот вызов на ноду, если вдруг кто работал с ним
router.get('/google', passport.authenticate('google', {
scope: ['profile', 'email', 'openid']
}));
вот настройки паспорта
passport.use(new GoogleStrategy({
callbackURL: '/auth/google/redirect',
clientID: keys.google.clientID,
clientSecret: keys.google.clientSecret
}, function (accessToken, refreshToken, profile, done) {
console.log(profile);
console.log(profile.emails);
})
);
не
попробуй так
let loginGoogle = () => {
return $http.get(/api/auth/google, {withCredentials : true});
};
не
просто если это кроссдоменный запрос, нужно учитывать CORS
Stas
а не, вроде не поменялась)
не
кеш наверное
не
let loginGoogle = () => {
return $http.get(/api/auth/google, {withCredentials : true, cache: false});
};
Stas
Я видел наноде добавляли вот такой список, но мне он не помог. Возможно тоже самое нужно указать в ангуляре как-то?
app.use(function(req, res, next) {
res.setHeader('Access-Control-Allow-Origin', 'http://localhost:3000');
res.setHeader('Access-Control-Allow-Methods', 'GET, POST, OPTIONS, PUT, PATCH, DELETE');
res.setHeader('Access-Control-Allow-Headers', 'X-Requested-With,content-type');
res.setHeader('Access-Control-Allow-Credentials', true);
next();
});
Stas
не
ну да можно добавить. Но withCredentials : false - как раз и говорит что бы запрос был пропущен без учета проверок домена
Stas
я с этой ошибкой уже дня 2 вожусь, есть куча подобных проблем на стековерфлоу, но нет ответа (
не
тю ...
не
я ошибся
не
let loginGoogle = () => {
return $http.get(/api/auth/google, {withCredentials : false, cache: false});
};
Stas
Stas
тоже самое вроде
не
ну тогда последнее это - добавить шапку самому, как писалось выше "в ноде .." вот так
headers: {
'Authorization': 'Basic bashe64usename:password'
}
не
let loginGoogle = () => {
return $http.get('/api/auth/google', {
//withCredentials : false,
cache: false,
headers: {
'Authorization': 'Basic bashe64usename:password',
'...': '...'
}
});
};
Stas
спс, сейчас попробую
не
велком, но логика только такова, не иначе
не
это ошибки именно CORS
Stas
ошибки поменялись
Failed to load https://accounts.google.com/o/oauth2/v2/auth?response_type=code&redirect_uri=http%3A%2F%2Flocalhost%3A3000%2Fauth%2Fgoogle%2Fredirect&scope=profile%20email%20openid&client_id=1060656164349-rpch2ibsm97k8kkc390bbv5m419g0g4h.apps.googleusercontent.com: Response to preflight request doesn't pass access control check: No 'Access-Control-Allow-Origin' header is present on the requested resource. Origin 'http://localhost:3000' is therefore not allowed access. The response had HTTP status code 405.
не
ух ты, 405
не
что то новенькое
не
а что там с заголовком Access-Control-Allow-Methods?
не
тут цепочка обьясняеться у автентификации по oAuth2 google
не
https://stackoverflow.com/questions/24026431/google-oauth2-0-405-error
не
на получения КОДа - ПОСТ запрос а не ГЕТ ))
не
по этому и 405
не
Response to preflight request .... это сервис гугла опроверг запрос и в заголовке написал типа по параметру шапки Access-Control-Allow-Origin - 405
Stas
я короче сделал вот так
let loginGoogle = function() {
window.open('/api/auth/google','','width=400,height=400');
};
вместо перенаправления и начало хотя бы форму входа выдавать
не
тоже выход ))
Stas
но я не понимаю в чём выход)))
Stas
просто увидел такое решение, но в чём прикол не пойму
Stas
какая разница в каком окне оно мне выдаст форму)
не
с формы csrf сработает, это второй метод защиты данных для передаваемых данных на сервер
не
а АПИ - имеет CORS prefleit
не
и вот с ним вся трабла
не
еще выход посмотреть какую нибудь библу для google auth как она реализует запрос, что туда пихает
не
полюбому мелочь какая то
не
ошибка поменялась - это уже говорит о том что проблема найдена но не решена ))
Stas
я пробовал делать не гет запрос а пост, ничего не происходит)
Stas
с окошком работает, но это бредовое решение как по мне, буду дальше ковыряться
Stas
может натолкнёшь на мысль что мне хотя бы искать в гугле?
не
реализацыя аутентификации server side
не
для ангуляраджиес
Stas
спасибо
Stas
ребятки, вопрос всё еще актуален 😔
Rem1te
Гугл не пускает по корсу из за доменного имени, localhost. Мое мнение.
Stas
с локалхоста без ангуляра пускает
Stas
я вот добавил кнопку которая напрямую вызывает с бэка, оно пропускает, но после перезагрузки 😕
Stas
типа редирект не делает
Stas
но когда впишу определённый путь то проходит
Stas
но к сожалению такое работает когда в роутах нет otherwise
Stas
иначе перенапрявляет на главную
Stas
если кто делал аутентификацию через соц сети (nodejs+angularjs) помогите плз
pa[aad
гугл не пускает потому что ему нужен домен, а не какой-то неизвестный ип
Stas
и когда я просто ввожу в адресную строку http://localhost:3000/auth/google, тоже работает
pa[aad
тебе домен нужен и добавить твой локальній домен фронта в гугл
AluV (დანიილ)
Привет, продскажите пожалуйста, правильно ли если у меня везде:
$scope: any,
$state: any,
StateStack: any,
Restangular: any,
toastr: any,
UnsavedChanges: any,
_: any,
$q: any
pa[aad
то это хреново если any
AluV (დანიილ)
ну scope в любом случае any, а вот как задавать другим не знаю
pa[aad
почему any ? ng.IScope
pa[aad
есть такая штука как @types
возможно к вашей либе будут описаны типы
Eugenio
AluV (დანიილ)
Это не подходит
pa[aad
pa[aad
сделай
export interface MyScope extends ng.IScope {
[key: string]: any;
}
Eugenio
export interface TvoyScope extends ng.IScope
pa[aad
это уже не проблема ангуляра
Stas
Ничего не понял что вы насоветовали. Какая разница откуда я делаю запрос в гугл, если он пропускает его. Проблема в том, что когда добавляется на фронте ангулярджс, гугл выдаёт ошибку заголовков. Без ангуляра никаких ошибок нет. Соответственно я делаю вывод, что до тогда как отправить запрос, мне с помощью ангуляра нужно добавить какие-то заголовки. Но я не знаю в чём проблема и гугл к сожалению тоже.