curl -X GET "https://api.tktchurch.com/v1/auth/me" \
-H "Authorization: Bearer eyJhbGciOiJIUzI1NiIs..."
const getCurrentUser = async (accessToken) => {
const response = await fetch('https://api.tktchurch.com/v1/auth/me', {
method: 'GET',
headers: {
'Authorization': `Bearer ${accessToken}`
}
});
if (!response.ok) {
const error = await response.json();
throw new Error(error.error.reason);
}
return response.json();
};
// Usage
try {
const user = await getCurrentUser('eyJhbGciOiJIUzI1NiIs...');
console.log('Current user:', user);
} catch (error) {
console.error('Failed to get user profile:', error.message);
}
func getCurrentUser(accessToken: String) async throws -> User {
var urlRequest = URLRequest(url: URL(string: "https://api.tktchurch.com/v1/auth/me")!)
urlRequest.httpMethod = "GET"
urlRequest.setValue("Bearer \(accessToken)", forHTTPHeaderField: "Authorization")
let (data, response) = try await URLSession.shared.data(for: urlRequest)
guard let httpResponse = response as? HTTPURLResponse else {
throw URLError(.badServerResponse)
}
if httpResponse.statusCode != 200 {
let error = try JSONDecoder().decode(ErrorResponse.self, from: data)
throw error
}
return try JSONDecoder().decode(User.self, from: data)
}
// Usage
do {
let user = try await getCurrentUser(accessToken: "eyJhbGciOiJIUzI1NiIs...")
print("Current user:", user)
} catch {
print("Failed to get user profile: \(error.localizedDescription)")
}
class UserService(private val client: OkHttpClient) {
suspend fun getCurrentUser(accessToken: String): User {
val request = Request.Builder()
.url("https://api.tktchurch.com/v1/auth/me")
.get()
.header("Authorization", "Bearer $accessToken")
.build()
client.newCall(request).execute().use { response ->
if (!response.isSuccessful) {
val error = response.body?.string()?.fromJson<ErrorResponse>()
throw Exception(error?.reason ?: "Failed to get user profile")
}
return response.body?.string()?.fromJson<User>()
?: throw Exception("Empty response")
}
}
}
// Usage
try {
val user = userService.getCurrentUser("eyJhbGciOiJIUzI1NiIs...")
println("Current user: $user")
} catch (e: Exception) {
println("Failed to get user profile: ${e.message}")
}
import axios from 'axios';
interface User {
id: string;
email: string;
firstName?: string;
lastName?: string;
status: 'active' | 'inactive' | 'suspended';
provider: 'local' | 'google' | 'facebook' | 'apple';
providerInfo?: {
providerId?: string;
displayName?: string;
photoUrl?: string;
email?: string;
};
lastLoginAt?: string;
roles?: Array<{
id?: string;
name: string;
description: string;
permissions: string[];
isSystem: boolean;
}>;
createdAt?: string;
}
const getCurrentUser = async (accessToken: string): Promise<User> => {
try {
const response = await axios.get(
'https://api.tktchurch.com/v1/auth/me',
{
headers: {
'Authorization': `Bearer ${accessToken}`
},
}
);
return response.data;
} catch (error) {
if (axios.isAxiosError(error)) {
throw new Error(error.response?.data?.error?.reason || 'Failed to get user profile');
}
throw error;
}
};
// Usage
try {
const user = await getCurrentUser('eyJhbGciOiJIUzI1NiIs...');
console.log('Current user:', user);
} catch (error) {
console.error('Failed to get user profile:', error.message);
}
{
"id": "123e4567-e89b-12d3-a456-426614174000",
"email": "[email protected]",
"firstName": "John",
"lastName": "Doe",
"status": "active",
"provider": "google",
"providerInfo": {
"providerId": "google123",
"displayName": "John Doe",
"photoUrl": "https://example.com/photo.jpg",
"email": "[email protected]"
},
"lastLoginAt": "2024-01-20T08:30:00Z",
"roles": [
{
"id": "456e4567-e89b-12d3-a456-426614174000",
"name": "Member",
"description": "Regular church member",
"permissions": ["event:read", "newsletter:read", "livestream:read"],
"isSystem": true
}
],
"createdAt": "2023-12-01T00:00:00Z"
}
{
"error": {
"status": 401,
"reason": "Invalid or expired access token"
}
}
{
"error": {
"status": 404,
"reason": "User not found"
}
}
Authentication
Get Current User
Get the profile of the currently authenticated user
GET
/
auth
/
me
curl -X GET "https://api.tktchurch.com/v1/auth/me" \
-H "Authorization: Bearer eyJhbGciOiJIUzI1NiIs..."
const getCurrentUser = async (accessToken) => {
const response = await fetch('https://api.tktchurch.com/v1/auth/me', {
method: 'GET',
headers: {
'Authorization': `Bearer ${accessToken}`
}
});
if (!response.ok) {
const error = await response.json();
throw new Error(error.error.reason);
}
return response.json();
};
// Usage
try {
const user = await getCurrentUser('eyJhbGciOiJIUzI1NiIs...');
console.log('Current user:', user);
} catch (error) {
console.error('Failed to get user profile:', error.message);
}
func getCurrentUser(accessToken: String) async throws -> User {
var urlRequest = URLRequest(url: URL(string: "https://api.tktchurch.com/v1/auth/me")!)
urlRequest.httpMethod = "GET"
urlRequest.setValue("Bearer \(accessToken)", forHTTPHeaderField: "Authorization")
let (data, response) = try await URLSession.shared.data(for: urlRequest)
guard let httpResponse = response as? HTTPURLResponse else {
throw URLError(.badServerResponse)
}
if httpResponse.statusCode != 200 {
let error = try JSONDecoder().decode(ErrorResponse.self, from: data)
throw error
}
return try JSONDecoder().decode(User.self, from: data)
}
// Usage
do {
let user = try await getCurrentUser(accessToken: "eyJhbGciOiJIUzI1NiIs...")
print("Current user:", user)
} catch {
print("Failed to get user profile: \(error.localizedDescription)")
}
class UserService(private val client: OkHttpClient) {
suspend fun getCurrentUser(accessToken: String): User {
val request = Request.Builder()
.url("https://api.tktchurch.com/v1/auth/me")
.get()
.header("Authorization", "Bearer $accessToken")
.build()
client.newCall(request).execute().use { response ->
if (!response.isSuccessful) {
val error = response.body?.string()?.fromJson<ErrorResponse>()
throw Exception(error?.reason ?: "Failed to get user profile")
}
return response.body?.string()?.fromJson<User>()
?: throw Exception("Empty response")
}
}
}
// Usage
try {
val user = userService.getCurrentUser("eyJhbGciOiJIUzI1NiIs...")
println("Current user: $user")
} catch (e: Exception) {
println("Failed to get user profile: ${e.message}")
}
import axios from 'axios';
interface User {
id: string;
email: string;
firstName?: string;
lastName?: string;
status: 'active' | 'inactive' | 'suspended';
provider: 'local' | 'google' | 'facebook' | 'apple';
providerInfo?: {
providerId?: string;
displayName?: string;
photoUrl?: string;
email?: string;
};
lastLoginAt?: string;
roles?: Array<{
id?: string;
name: string;
description: string;
permissions: string[];
isSystem: boolean;
}>;
createdAt?: string;
}
const getCurrentUser = async (accessToken: string): Promise<User> => {
try {
const response = await axios.get(
'https://api.tktchurch.com/v1/auth/me',
{
headers: {
'Authorization': `Bearer ${accessToken}`
},
}
);
return response.data;
} catch (error) {
if (axios.isAxiosError(error)) {
throw new Error(error.response?.data?.error?.reason || 'Failed to get user profile');
}
throw error;
}
};
// Usage
try {
const user = await getCurrentUser('eyJhbGciOiJIUzI1NiIs...');
console.log('Current user:', user);
} catch (error) {
console.error('Failed to get user profile:', error.message);
}
{
"id": "123e4567-e89b-12d3-a456-426614174000",
"email": "[email protected]",
"firstName": "John",
"lastName": "Doe",
"status": "active",
"provider": "google",
"providerInfo": {
"providerId": "google123",
"displayName": "John Doe",
"photoUrl": "https://example.com/photo.jpg",
"email": "[email protected]"
},
"lastLoginAt": "2024-01-20T08:30:00Z",
"roles": [
{
"id": "456e4567-e89b-12d3-a456-426614174000",
"name": "Member",
"description": "Regular church member",
"permissions": ["event:read", "newsletter:read", "livestream:read"],
"isSystem": true
}
],
"createdAt": "2023-12-01T00:00:00Z"
}
{
"error": {
"status": 401,
"reason": "Invalid or expired access token"
}
}
{
"error": {
"status": 404,
"reason": "User not found"
}
}
This endpoint requires authentication. Include the JWT access token in the Authorization header.
Response
string
User’s unique identifier (UUID)
string
User’s email address
string
User’s first name
string
User’s last name
string
User’s account status. One of:
active: User is active and can access the systeminactive: User is inactive (unverified email or deactivated account)suspended: User is temporarily suspended
string
Authentication provider. One of:
local: Local authentication using email and passwordgoogle: Google OAuth authenticationfacebook: Facebook OAuth authenticationapple: Apple Sign In authentication
object
string
Timestamp of last login
array
string
Account creation timestamp
Error Responses
object
Common error cases:
- 401 Unauthorized: Missing or invalid access token
- 401 Unauthorized: Token has expired
- 404 Not Found: User not found
curl -X GET "https://api.tktchurch.com/v1/auth/me" \
-H "Authorization: Bearer eyJhbGciOiJIUzI1NiIs..."
const getCurrentUser = async (accessToken) => {
const response = await fetch('https://api.tktchurch.com/v1/auth/me', {
method: 'GET',
headers: {
'Authorization': `Bearer ${accessToken}`
}
});
if (!response.ok) {
const error = await response.json();
throw new Error(error.error.reason);
}
return response.json();
};
// Usage
try {
const user = await getCurrentUser('eyJhbGciOiJIUzI1NiIs...');
console.log('Current user:', user);
} catch (error) {
console.error('Failed to get user profile:', error.message);
}
func getCurrentUser(accessToken: String) async throws -> User {
var urlRequest = URLRequest(url: URL(string: "https://api.tktchurch.com/v1/auth/me")!)
urlRequest.httpMethod = "GET"
urlRequest.setValue("Bearer \(accessToken)", forHTTPHeaderField: "Authorization")
let (data, response) = try await URLSession.shared.data(for: urlRequest)
guard let httpResponse = response as? HTTPURLResponse else {
throw URLError(.badServerResponse)
}
if httpResponse.statusCode != 200 {
let error = try JSONDecoder().decode(ErrorResponse.self, from: data)
throw error
}
return try JSONDecoder().decode(User.self, from: data)
}
// Usage
do {
let user = try await getCurrentUser(accessToken: "eyJhbGciOiJIUzI1NiIs...")
print("Current user:", user)
} catch {
print("Failed to get user profile: \(error.localizedDescription)")
}
class UserService(private val client: OkHttpClient) {
suspend fun getCurrentUser(accessToken: String): User {
val request = Request.Builder()
.url("https://api.tktchurch.com/v1/auth/me")
.get()
.header("Authorization", "Bearer $accessToken")
.build()
client.newCall(request).execute().use { response ->
if (!response.isSuccessful) {
val error = response.body?.string()?.fromJson<ErrorResponse>()
throw Exception(error?.reason ?: "Failed to get user profile")
}
return response.body?.string()?.fromJson<User>()
?: throw Exception("Empty response")
}
}
}
// Usage
try {
val user = userService.getCurrentUser("eyJhbGciOiJIUzI1NiIs...")
println("Current user: $user")
} catch (e: Exception) {
println("Failed to get user profile: ${e.message}")
}
import axios from 'axios';
interface User {
id: string;
email: string;
firstName?: string;
lastName?: string;
status: 'active' | 'inactive' | 'suspended';
provider: 'local' | 'google' | 'facebook' | 'apple';
providerInfo?: {
providerId?: string;
displayName?: string;
photoUrl?: string;
email?: string;
};
lastLoginAt?: string;
roles?: Array<{
id?: string;
name: string;
description: string;
permissions: string[];
isSystem: boolean;
}>;
createdAt?: string;
}
const getCurrentUser = async (accessToken: string): Promise<User> => {
try {
const response = await axios.get(
'https://api.tktchurch.com/v1/auth/me',
{
headers: {
'Authorization': `Bearer ${accessToken}`
},
}
);
return response.data;
} catch (error) {
if (axios.isAxiosError(error)) {
throw new Error(error.response?.data?.error?.reason || 'Failed to get user profile');
}
throw error;
}
};
// Usage
try {
const user = await getCurrentUser('eyJhbGciOiJIUzI1NiIs...');
console.log('Current user:', user);
} catch (error) {
console.error('Failed to get user profile:', error.message);
}
{
"id": "123e4567-e89b-12d3-a456-426614174000",
"email": "[email protected]",
"firstName": "John",
"lastName": "Doe",
"status": "active",
"provider": "google",
"providerInfo": {
"providerId": "google123",
"displayName": "John Doe",
"photoUrl": "https://example.com/photo.jpg",
"email": "[email protected]"
},
"lastLoginAt": "2024-01-20T08:30:00Z",
"roles": [
{
"id": "456e4567-e89b-12d3-a456-426614174000",
"name": "Member",
"description": "Regular church member",
"permissions": ["event:read", "newsletter:read", "livestream:read"],
"isSystem": true
}
],
"createdAt": "2023-12-01T00:00:00Z"
}
{
"error": {
"status": 401,
"reason": "Invalid or expired access token"
}
}
{
"error": {
"status": 404,
"reason": "User not found"
}
}
