google login eklendi
This commit is contained in:
@@ -149,6 +149,72 @@ authRouter.post('/login', async (req, res) => {
|
||||
return res.json({ token, user: mapUserRecord(userRecord) });
|
||||
});
|
||||
|
||||
authRouter.post('/oauth', async (req, res) => {
|
||||
const { accessToken } = req.body || {};
|
||||
if (!accessToken) {
|
||||
return res.status(400).json({ message: 'Geçerli bir Google oturumu bulunamadı.' });
|
||||
}
|
||||
|
||||
try {
|
||||
const response = await fetch(`${process.env.SUPABASE_URL}/auth/v1/user`, {
|
||||
headers: {
|
||||
Authorization: `Bearer ${accessToken}`,
|
||||
apikey: process.env.SUPABASE_SERVICE_ROLE_KEY,
|
||||
},
|
||||
});
|
||||
|
||||
if (!response.ok) {
|
||||
return res.status(401).json({ message: 'Google oturumu doğrulanamadı.' });
|
||||
}
|
||||
|
||||
const supabaseUser = await response.json();
|
||||
const email = supabaseUser?.email?.toLowerCase();
|
||||
if (!email) {
|
||||
return res.status(400).json({ message: 'Google hesabında email bilgisi bulunamadı.' });
|
||||
}
|
||||
const name =
|
||||
supabaseUser?.user_metadata?.full_name ||
|
||||
supabaseUser?.user_metadata?.name ||
|
||||
email.split('@')[0];
|
||||
const username = (supabaseUser?.user_metadata?.user_name || email.split('@')[0]).replace(/[^a-zA-Z0-9-_]/g, '');
|
||||
|
||||
const { data: existingUser, error: fetchError } = await supabase
|
||||
.from(USERS_TABLE)
|
||||
.select('id,email,name,username')
|
||||
.eq('email', email)
|
||||
.maybeSingle();
|
||||
|
||||
if (fetchError && fetchError.code !== 'PGRST116') {
|
||||
return res.status(500).json({ message: 'Kullanıcı sorgulanamadı.' });
|
||||
}
|
||||
|
||||
let userRecord = existingUser;
|
||||
if (!userRecord) {
|
||||
const { data: insertedUser, error: insertError } = await supabase
|
||||
.from(USERS_TABLE)
|
||||
.insert({
|
||||
name,
|
||||
email,
|
||||
username,
|
||||
password_hash: 'GOOGLE_OAUTH',
|
||||
})
|
||||
.select('id,email,name,username')
|
||||
.single();
|
||||
|
||||
if (insertError || !insertedUser) {
|
||||
return res.status(500).json({ message: 'Google hesabı oluşturulamadı.' });
|
||||
}
|
||||
userRecord = insertedUser;
|
||||
}
|
||||
|
||||
const token = createToken(userRecord);
|
||||
return res.json({ token, user: mapUserRecord(userRecord) });
|
||||
} catch (error) {
|
||||
console.error('Google OAuth hatası:', error);
|
||||
return res.status(500).json({ message: 'Google girişi tamamlanamadı.' });
|
||||
}
|
||||
});
|
||||
|
||||
authRouter.get('/me', authMiddleware, async (req, res) => {
|
||||
const { data: userRecord, error } = await supabase
|
||||
.from(USERS_TABLE)
|
||||
|
||||
Reference in New Issue
Block a user