#AuthProvider
Ive liked Nextcloud, but:
Why isnt SSO login preinstalled when it can act as an auth provider?

Btw, if anyone knows a container image where env vars persist beyond setup, let me know.

#Nextcloud #SSO #SingleSignOn #AuthProvider #ContainerImage #DevOps #CloudStorage #OpenSource #SelfHosted #Docker
March 10, 2025 at 7:33 AM
How to configure a simple React application to use Google Identity Services as an authentication provider? 🤔🔐

Read the full guide to find out!👇

marmelab.com/blog/2024/11...

#reactadmin #react #GoogleIdentityServices #AuthProvider
November 18, 2024 at 2:51 PM
"Why do you try to update the auth and AuthProvider files again? We need to update the login.tsx file"
"Why is the patch empty. Try again?"

Is it just me or do most conversations with Claude go like that?
January 20, 2025 at 8:16 AM
アプリ内のログイン情報をOAuth版に書き換えるところまで実装した。通常アクセスがアプリパスワードのままなので全部OAuth対応に差し替える。kbskyの文脈では「AuthProviderとしてBearerTokenAuthProviderではなくOAuthProviderを使う」ってことなんだけど地味にdPoPNonceの回収を全部の処理に入れなきゃいけないのが面倒くさい。
March 10, 2025 at 7:49 AM
🚀 New #release · agno v2.7.2a2

Pre-release for live testing on agentos-railway (agno 2.7.2a2 + agnoctl 0.1.2a2, lockstep).
Over v2.7.2a1:
• MCP OAuth hardening: external (Tier-2) t…

Check and #self-host it → selfhost.directory/project/agno#update-3406471

#selfhost #selfhosted #homelab #opensource
agno v2.7.2a2
Pre-release for live testing on agentos-railway (agno 2.7.2a2 + agnoctl 0.1.2a2, lockstep). Over v2.7.2a1: • MCP OAuth hardening: external (Tier-2) tokens with reserved sa:* subjects rejected, refresh-token reuse detection, refined auth_mode reporting, typed mcp_auth: AuthProvider
selfhost.directory
July 9, 2026 at 12:00 AM
🚀 New #release · agno v2.7.2a1

Pre-release for live testing (agno 2.7.2a1 + agnoctl 0.1.2a1, lockstep).
• AgentOS(mcp_server=...) replaces enable_mcp_server + mcp_config (deprecate…

Check and #self-host it → selfhost.directory/project/agno#update-3304217

#selfhost #selfhosted #homelab #opensource
agno v2.7.2a1
Pre-release for live testing (agno 2.7.2a1 + agnoctl 0.1.2a1, lockstep). • AgentOS(mcp_server=...) replaces enable_mcp_server + mcp_config (deprecated aliases kept, wire format unchanged) • OAuth on the AgentOS MCP endpoint: AgentOSBuiltinAuth (built-in AS, BaseDb-backed store) + BYO fastmcp AuthProvider (AuthKit), PAT/JWT coexistence via MultiAuth, trust-marker scrubbing for external IdPs
selfhost.directory
July 8, 2026 at 12:50 PM
Last stream we published a Twitch authentication provider VS Code extension!
https://marketplace.visualstudio.com/items?itemName=clarkio.vscode-twitch-authprovider

Today we're going to test out using it in another extension as a dependency. Stop by to see if we're successful or not 😅
Twitch Authentication Provider - Visual Studio Marketplace
Extension for Visual Studio Code - Twitch Authentication Provider for VS Code
marketplace.visualstudio.com
July 28, 2023 at 4:20 PM
agentidentity.googleapis.com/AuthProvider. For more information, see Use custom organization policies for Agent Identity. This feature is in GA.
August 16, 2026 at 7:20 AM
Auth Protected Route example
app.jsx import AuthProvider from "./provider/authProvider"; import Routes from "./routes"; function App() { return ( <AuthProvider> <Routes /> </AuthProvider> ); } export default App; provider/authProvider.jsx import axios from "axios"; import { createContext, useContext, useEffect, useMemo, useState } from "react"; const AuthContext = createContext(); const AuthProvider = ({ children }) => { // State to hold the authentication token const [token, setToken_] = useState(localStorage.getItem("token")); // Function to set the authentication token const setToken = (newToken) => { setToken_(newToken); }; useEffect(() => { if (token) { axios.defaults.headers.common["Authorization"] = "Bearer " + token; localStorage.setItem("token", token); } else { delete axios.defaults.headers.common["Authorization"]; localStorage.removeItem("token"); } }, [token]); // Memoized value of the authentication context const contextValue = useMemo( () => ({ token, setToken, }), [token] ); // Provide the authentication context to the children components return ( <AuthContext.Provider value={contextValue}>{children}</AuthContext.Provider> ); }; export const useAuth = () => { return useContext(AuthContext); }; export default AuthProvider; routes/ProtectedRoute.jsx import { Navigate, Outlet } from "react-router-dom"; import { useAuth } from "../provider/authProvider"; export const ProtectedRoute = () => { const { token } = useAuth(); // Check if the user is authenticated if (!token) { // If not authenticated, redirect to the login page return <Navigate to="/login" />; } // If authenticated, render the child routes return <Outlet />; }; routes/index.jsx import { RouterProvider, createBrowserRouter } from "react-router-dom"; import { useAuth } from "../provider/authProvider"; import { ProtectedRoute } from "./ProtectedRoute"; import Login from "../pages/Login"; import Logout from "../pages/Logout"; const Routes = () => { const { token } = useAuth(); // Define public routes accessible to all users const routesForPublic = [ { path: "/service", element: <div>Service Page</div>, }, { path: "/about-us", element: <div>About Us</div>, }, ]; // Define routes accessible only to authenticated users const routesForAuthenticatedOnly = [ { path: "/", element: <ProtectedRoute />, // Wrap the component in ProtectedRoute children: [ { path: "", element: <div>User Home Page</div>, }, { path: "/profile", element: <div>User Profile</div>, }, { path: "/logout", element: <Logout/>, }, ], }, ]; // Define routes accessible only to non-authenticated users const routesForNotAuthenticatedOnly = [ { path: "/", element: <div>Home Page</div>, }, { path: "/login", element: <Login/>, }, ]; // Combine and conditionally include routes based on authentication status const router = createBrowserRouter([ ...routesForPublic, ...(!token ? routesForNotAuthenticatedOnly : []), ...routesForAuthenticatedOnly, ]); // Provide the router configuration using RouterProvider return <RouterProvider router={router} />; }; export default Routes; pages/login.jsx import { useNavigate } from "react-router-dom"; import { useAuth } from "../provider/authProvider"; const Login = () => { const { setToken } = useAuth(); const navigate = useNavigate(); const handleLogin = () => { setToken("this is a test token"); navigate("/", { replace: true }); }; setTimeout(() => { handleLogin(); }, 3 * 1000); return <>Login Page</>; }; export default Login; pages/Logout.jsx import { useNavigate } from "react-router-dom"; import { useAuth } from "../provider/authProvider"; const Logout = () => { const { setToken } = useAuth(); const navigate = useNavigate(); const handleLogout = () => { setToken(); navigate("/", { replace: true }); }; setTimeout(() => { handleLogout(); }, 3 * 1000); return <>Logout Page</>; }; export default Logout; "dependencies": { "axios": "^1.4.0", "react": "^18.2.0", "react-dom": "^18.2.0", "react-router-dom": "^6.11.2" },
forem.com
April 4, 2025 at 4:48 AM
composeProviders flattens provider pyramid:

const AppProviders = composeProviders(
AuthProvider,
ThemeProvider,
RouterProvider,
SnackbarProvider
)



Order is outermost-first. DisplayName preserved in DevTools.

#TypeScript #ReactJS #webdev #React
GitHub - harveyrandall/react-container-kit: TypeScript utilities and helpers for unstated-next state management
TypeScript utilities and helpers for unstated-next state management - harveyrandall/react-container-kit
github.com
March 21, 2026 at 4:02 AM
AuthProviderをriverpod annotationで生成したら、生成された関数名がauthProviderProviderになってちょっと残念だった
April 16, 2025 at 4:45 AM
Auth Protected Route example
app.jsx import AuthProvider from "./provider/authProvider"; import Routes from "./routes"; function App() { return ( <AuthProvider> <Routes /> </AuthProvider> ); } export default App; provider/authProvider.jsx import axios from "axios"; import { createContext, useContext, useEffect, useMemo, useState } from "react"; const AuthContext = createContext(); const AuthProvider = ({ children }) => { // State to hold the authentication token const [token, setToken_] = useState(localStorage.getItem("token")); // Function to set the authentication token const setToken = (newToken) => { setToken_(newToken); }; useEffect(() => { if (token) { axios.defaults.headers.common["Authorization"] = "Bearer " + token; localStorage.setItem("token", token); } else { delete axios.defaults.headers.common["Authorization"]; localStorage.removeItem("token"); } }, [token]); // Memoized value of the authentication context const contextValue = useMemo( () => ({ token, setToken, }), [token] ); // Provide the authentication context to the children components return ( <AuthContext.Provider value={contextValue}>{children}</AuthContext.Provider> ); }; export const useAuth = () => { return useContext(AuthContext); }; export default AuthProvider; routes/ProtectedRoute.jsx import { Navigate, Outlet } from "react-router-dom"; import { useAuth } from "../provider/authProvider"; export const ProtectedRoute = () => { const { token } = useAuth(); // Check if the user is authenticated if (!token) { // If not authenticated, redirect to the login page return <Navigate to="/login" />; } // If authenticated, render the child routes return <Outlet />; }; routes/index.jsx import { RouterProvider, createBrowserRouter } from "react-router-dom"; import { useAuth } from "../provider/authProvider"; import { ProtectedRoute } from "./ProtectedRoute"; import Login from "../pages/Login"; import Logout from "../pages/Logout"; const Routes = () => { const { token } = useAuth(); // Define public routes accessible to all users const routesForPublic = [ { path: "/service", element: <div>Service Page</div>, }, { path: "/about-us", element: <div>About Us</div>, }, ]; // Define routes accessible only to authenticated users const routesForAuthenticatedOnly = [ { path: "/", element: <ProtectedRoute />, // Wrap the component in ProtectedRoute children: [ { path: "", element: <div>User Home Page</div>, }, { path: "/profile", element: <div>User Profile</div>, }, { path: "/logout", element: <Logout/>, }, ], }, ]; // Define routes accessible only to non-authenticated users const routesForNotAuthenticatedOnly = [ { path: "/", element: <div>Home Page</div>, }, { path: "/login", element: <Login/>, }, ]; // Combine and conditionally include routes based on authentication status const router = createBrowserRouter([ ...routesForPublic, ...(!token ? routesForNotAuthenticatedOnly : []), ...routesForAuthenticatedOnly, ]); // Provide the router configuration using RouterProvider return <RouterProvider router={router} />; }; export default Routes; pages/login.jsx import { useNavigate } from "react-router-dom"; import { useAuth } from "../provider/authProvider"; const Login = () => { const { setToken } = useAuth(); const navigate = useNavigate(); const handleLogin = () => { setToken("this is a test token"); navigate("/", { replace: true }); }; setTimeout(() => { handleLogin(); }, 3 * 1000); return <>Login Page</>; }; export default Login; pages/Logout.jsx import { useNavigate } from "react-router-dom"; import { useAuth } from "../provider/authProvider"; const Logout = () => { const { setToken } = useAuth(); const navigate = useNavigate(); const handleLogout = () => { setToken(); navigate("/", { replace: true }); }; setTimeout(() => { handleLogout(); }, 3 * 1000); return <>Logout Page</>; }; export default Logout; "dependencies": { "axios": "^1.4.0", "react": "^18.2.0", "react-dom": "^18.2.0", "react-router-dom": "^6.11.2" },
dev.to
April 4, 2025 at 4:47 AM