Skip to content

OAuth2 Code-Beispiele

PHP

php
<?php
// redirect.php

$clientId     = 'DEINE_CLIENT_ID';
$clientSecret = 'DEIN_CLIENT_SECRET';
$redirectUri  = 'https://deine-app.de/redirect.php';

$code = $_GET['code'] ?? null;
if (!$code) die('Kein Code erhalten.');

// Code gegen Token tauschen
$url = 'https://nexcord.de/api/oauth2/token?' . http_build_query([
    'clientId'     => $clientId,
    'clientSecret' => $clientSecret,
    'grantType'    => 'authorization_code',
    'code'         => $code,
    'redirectUri'  => $redirectUri,
]);

$ch = curl_init($url);
curl_setopt_array($ch, [
    CURLOPT_POST           => true,
    CURLOPT_RETURNTRANSFER => true,
]);
$data = json_decode(curl_exec($ch), true);
curl_close($ch);

if (!isset($data['accessToken'])) {
    die('Fehler: ' . json_encode($data));
}

$accessToken  = $data['accessToken'];
$refreshToken = $data['refreshToken'];

// User-Infos abrufen
$ch = curl_init('https://nexcord.de/api/users/@me');
curl_setopt_array($ch, [
    CURLOPT_RETURNTRANSFER => true,
    CURLOPT_HTTPHEADER     => ["Authorization: $accessToken"],
]);
$user = json_decode(curl_exec($ch), true);
curl_close($ch);

session_start();
$_SESSION['nexcord_user']  = $user;
$_SESSION['nexcord_token'] = $accessToken;

header('Location: /dashboard.php');
exit;

Node.js (Express)

js
// redirect.js
const express = require('express');
const axios   = require('axios');
const router  = express.Router();

const CLIENT_ID     = 'DEINE_CLIENT_ID';
const CLIENT_SECRET = 'DEIN_CLIENT_SECRET';
const REDIRECT_URI  = 'https://deine-app.de/redirect';

router.get('/redirect', async (req, res) => {
  const { code } = req.query;
  if (!code) return res.status(400).send('Kein Code.');

  try {
    // Token holen
    const { data: tokenData } = await axios.post(
      'https://nexcord.de/api/oauth2/token',
      null,
      {
        params: {
          clientId:     CLIENT_ID,
          clientSecret: CLIENT_SECRET,
          grantType:    'authorization_code',
          code,
          redirectUri:  REDIRECT_URI,
        }
      }
    );

    // User-Infos abrufen
    const { data: user } = await axios.get('https://nexcord.de/api/users/@me', {
      headers: { Authorization: tokenData.accessToken }
    });

    req.session.user  = user;
    req.session.token = tokenData.accessToken;

    res.redirect('/dashboard');
  } catch (err) {
    res.status(500).json(err.response?.data ?? err.message);
  }
});

module.exports = router;
js
// index.js — Minimal Setup
const express = require('express');
const session = require('express-session');
const redirect = require('./redirect');

const app = express();
app.use(session({ secret: 'geheim', resave: false, saveUninitialized: true }));
app.use(redirect);
app.listen(3000);

Dependencies:

bash
npm install express axios express-session

Login-Button generieren

js
// Login-URL zusammenbauen
const loginUrl = new URL('https://nexcord.de/authorize');
loginUrl.searchParams.set('clientId', 'DEINE_CLIENT_ID');
loginUrl.searchParams.set('scopes', 'USER_INFO USER_EMAIL');
loginUrl.searchParams.set('redirectUri', 'https://deine-app.de/redirect');

// <a href={loginUrl}>Mit Nexcord anmelden</a>

Nexcord — Self-hosted Chat Platform