[{"data":1,"prerenderedAt":326},["ShallowReactive",2],{"navigation":3,"/docs/configuration/authentication":156,"/docs/configuration/authentication-surround":321},[4,23,83,103,118,133,141],{"title":5,"path":6,"stem":7,"children":8,"icon":22},"Getting Started","/docs/getting-started","docs/1.getting-started/1.index",[9,12,17],{"title":10,"path":6,"stem":7,"icon":11},"What is TaskView","i-lucide-house",{"title":13,"path":14,"stem":15,"icon":16},"Installation","/docs/getting-started/installation","docs/1.getting-started/2.installation","i-lucide-download",{"title":18,"path":19,"stem":20,"icon":21},"Quick Start","/docs/getting-started/usage","docs/1.getting-started/3.usage","i-lucide-rocket",false,{"title":24,"icon":22,"path":25,"stem":26,"children":27,"page":22},"Features","/docs/features","docs/2.features",[28,33,38,43,48,53,58,63,68,73,78],{"title":29,"path":30,"stem":31,"icon":32},"Projects and Lists","/docs/features/projects-and-lists","docs/2.features/1.projects-and-lists","i-lucide-folder",{"title":34,"path":35,"stem":36,"icon":37},"Organizations","/docs/features/organizations","docs/2.features/10.organizations","i-lucide-building-2",{"title":39,"path":40,"stem":41,"icon":42},"SSO (Single Sign-On)","/docs/features/sso","docs/2.features/11.sso","i-lucide-shield-check",{"title":44,"path":45,"stem":46,"icon":47},"Tasks","/docs/features/tasks","docs/2.features/2.tasks","i-lucide-check-square",{"title":49,"path":50,"stem":51,"icon":52},"Kanban Board","/docs/features/kanban","docs/2.features/3.kanban","i-lucide-columns-3",{"title":54,"path":55,"stem":56,"icon":57},"Dependency Graph","/docs/features/graph","docs/2.features/4.graph","i-lucide-git-branch",{"title":59,"path":60,"stem":61,"icon":62},"Dashboard","/docs/features/dashboard","docs/2.features/5.dashboard","i-lucide-layout-dashboard",{"title":64,"path":65,"stem":66,"icon":67},"Notifications","/docs/features/notifications","docs/2.features/6.notifications","i-lucide-bell",{"title":69,"path":70,"stem":71,"icon":72},"Webhooks","/docs/features/webhooks","docs/2.features/7.webhooks","i-lucide-webhook",{"title":74,"path":75,"stem":76,"icon":77},"API Tokens","/docs/features/api-tokens","docs/2.features/8.api-tokens","i-lucide-key-round",{"title":79,"path":80,"stem":81,"icon":82},"Sessions & Devices","/docs/features/sessions","docs/2.features/9.sessions","i-lucide-monitor-smartphone",{"title":84,"icon":22,"path":85,"stem":86,"children":87,"page":22},"Integrations","/docs/integrations","docs/3.integrations",[88,93,98],{"title":89,"path":90,"stem":91,"icon":92},"GitHub & GitLab Setup","/docs/integrations/setup","docs/3.integrations/1.setup","i-lucide-git-pull-request",{"title":94,"path":95,"stem":96,"icon":97},"MCP Server","/docs/integrations/mcp","docs/3.integrations/2.mcp","i-lucide-bot",{"title":99,"path":100,"stem":101,"icon":102},"Telegram & Slack Setup","/docs/integrations/messaging","docs/3.integrations/3.messaging","i-lucide-send",{"title":104,"icon":22,"path":105,"stem":106,"children":107,"page":22},"Configuration","/docs/configuration","docs/4.configuration",[108,113],{"title":109,"path":110,"stem":111,"icon":112},"Environment Variables","/docs/configuration/environment-variables","docs/4.configuration/1.environment-variables","i-lucide-settings",{"title":114,"path":115,"stem":116,"icon":117},"Authentication","/docs/configuration/authentication","docs/4.configuration/2.authentication","i-lucide-lock",{"title":119,"icon":22,"path":120,"stem":121,"children":122,"page":22},"Collaboration","/docs/collaboration","docs/5.collaboration",[123,128],{"title":124,"path":125,"stem":126,"icon":127},"Team Members","/docs/collaboration/members","docs/5.collaboration/1.members","i-lucide-users",{"title":129,"path":130,"stem":131,"icon":132},"Roles and Permissions","/docs/collaboration/roles-and-permissions","docs/5.collaboration/2.roles-and-permissions","i-lucide-shield",{"title":134,"path":135,"stem":136,"children":137,"icon":22},"FAQ","/docs/faq","docs/6.faq/1.index",[138],{"title":139,"path":135,"stem":136,"icon":140},"Frequently Asked Questions","i-lucide-circle-help",{"title":142,"icon":22,"path":143,"stem":144,"children":145,"page":22},"Guides","/docs/guides","docs/7.guides",[146,151],{"title":147,"path":148,"stem":149,"icon":150},"Deploy TaskView on a VPS with Nginx","/docs/guides/deploy-vps-nginx","docs/7.guides/1.deploy-vps-nginx","i-lucide-server",{"title":152,"path":153,"stem":154,"icon":155},"TaskView for Freelancers","/docs/guides/taskview-for-freelancers","docs/7.guides/2.taskview-for-freelancers","i-lucide-briefcase",{"id":157,"title":114,"body":158,"description":315,"extension":316,"meta":317,"navigation":318,"path":115,"seo":319,"stem":116,"__hash__":320},"docs/docs/4.configuration/2.authentication.md",{"type":159,"value":160,"toc":300},"minimark",[161,165,170,173,176,181,184,188,191,195,203,206,233,237,250,254,257,261,264,279,282,293,297],[162,163,164],"p",{},"TaskView supports multiple ways to sign in - email/password, email/code, GitHub, Google, and Apple. You can enable whichever methods make sense for your team.",[166,167,169],"h2",{"id":168},"email-and-password","Email and password",[162,171,172],{},"This is the default method and works out of the box. Users register with an email and password, and log in the same way (email conformation is required).",[162,174,175],{},"If you have SMTP configured, users will receive a confirmation email after registration.\nWithout SMTP, email confirmation is skipped and accounts should be activated manually.",[177,178,180],"h3",{"id":179},"password-recovery","Password recovery",[162,182,183],{},"Requires SMTP. Users click \"Forgot password\" on the login screen, enter their email, and receive a reset link. Without SMTP configured, password recovery is not available - you'll need to reset passwords manually in the database.",[166,185,187],{"id":186},"oauth-providers","OAuth providers",[162,189,190],{},"TaskView can use external providers for login. This is separate from the integration OAuth (which is for connecting GitHub/GitLab repositories).",[177,192,194],{"id":193},"github-login","GitHub login",[162,196,197,198,202],{},"Users click \"Sign in with GitHub\" and authorize the app. TaskView only requests the ",[199,200,201],"code",{},"user:email"," scope - it reads the email to match or create an account.",[162,204,205],{},"To enable, you need a GitHub OAuth App (separate from the integrations one):",[207,208,209,220,227],"ol",{},[210,211,212,213],"li",{},"Go to ",[214,215,219],"a",{"href":216,"rel":217},"https://github.com/settings/developers",[218],"nofollow","GitHub Developer Settings",[210,221,222,223],{},"Create a ",[224,225,226],"strong",{},"New OAuth App",[210,228,229,230],{},"Set the callback URL to ",[199,231,232],{},"{API_URL}/module/auth/provider/github/callback",[177,234,236],{"id":235},"google-login","Google login",[162,238,239,240,245,246,249],{},"Works the same way. Create credentials in the ",[214,241,244],{"href":242,"rel":243},"https://console.cloud.google.com/apis/credentials",[218],"Google Cloud Console",", set the callback to ",[199,247,248],{},"{API_URL}/module/auth/provider/google/callback",".",[177,251,253],{"id":252},"apple-login","Apple login",[162,255,256],{},"Available for users on Apple devices. Requires an Apple Developer account and Sign in with Apple configuration.",[166,258,260],{"id":259},"sessions","Sessions",[162,262,263],{},"TaskView uses JWT tokens for session management:",[265,266,267,273],"ul",{},[210,268,269,272],{},[224,270,271],{},"Access token"," - short-lived (default: 1 day), used for API requests",[210,274,275,278],{},[224,276,277],{},"Refresh token"," - longer-lived (default: 2 days), used to get a new access token",[162,280,281],{},"When the access token expires, the app automatically uses the refresh token to get a new one. Users stay logged in as long as the refresh token is valid.",[162,283,284,285,288,289,292],{},"You can adjust token lifetimes with the ",[199,286,287],{},"ACCESS_LIFE_TIME"," and ",[199,290,291],{},"REFRESH_LIFE_TIME"," environment variables.",[166,294,296],{"id":295},"account-deletion","Account deletion",[162,298,299],{},"Users can delete their own account from the account settings page. This is a two-step process - they request a deletion code (sent by email if SMTP is configured), then confirm. Account deletion removes all personal data (You cannot undo this action. You can only restore the data from a backup, if you have one.).",{"title":301,"searchDepth":302,"depth":302,"links":303},"",2,[304,308,313,314],{"id":168,"depth":302,"text":169,"children":305},[306],{"id":179,"depth":307,"text":180},3,{"id":186,"depth":302,"text":187,"children":309},[310,311,312],{"id":193,"depth":307,"text":194},{"id":235,"depth":307,"text":236},{"id":252,"depth":307,"text":253},{"id":259,"depth":302,"text":260},{"id":295,"depth":302,"text":296},"Configure authentication in TaskView - email/password, email/code, OAuth with GitHub, Google, and Apple Sign In. JWT session management, password recovery, and account deletion for your self-hosted instance.","md",{},{"icon":117},{"title":114,"description":315},"pG09Ro6mLpBcuS3dAApWmGUvweCQ63m4UfsNu-Pj9fk",[322,324],{"title":109,"path":110,"stem":111,"description":323,"icon":112,"children":-1},"Complete reference for TaskView environment variables - database connection, JWT authentication, OAuth providers, SMTP email, GitHub/GitLab integration, encryption, and CORS configuration for your self-hosted Docker deployment.",{"title":124,"path":125,"stem":126,"description":325,"icon":127,"children":-1},"Invite team members to TaskView projects by email, assign tasks, manage access, and control visibility. Built-in collaboration tools with project ownership and role assignment for self-hosted project management.",1783289462323]