[{"data":1,"prerenderedAt":498},["ShallowReactive",2],{"docsv3-nav":3,"\u002Fdocs\u002Fv3\u002Fintegrations\u002Flearnworlds-account-sharing-prevention":219},[4],{"title":5,"path":6,"stem":7,"children":8,"page":188},"V3","\u002Fdocs\u002Fv3","1.docs\u002Fv3",[9,13,17,21,38,87,189,198],{"title":10,"path":11,"stem":12},"Introduction","\u002Fdocs\u002Fv3\u002Fintroduction","1.docs\u002Fv3\u002F1.Introduction",{"title":14,"path":15,"stem":16},"Quick start","\u002Fdocs\u002Fv3\u002Fquick-start","1.docs\u002Fv3\u002F2.Quick start",{"title":18,"path":19,"stem":20},"Challenge flow","\u002Fdocs\u002Fv3\u002Fchallenge-flow","1.docs\u002Fv3\u002F3.Challenge flow",{"title":22,"path":23,"stem":24,"children":25},"Fundamentals","\u002Fdocs\u002Fv3\u002Ffundamentals","1.docs\u002Fv3\u002F4.fundamentals",[26,30,34],{"title":27,"path":28,"stem":29},"Signup protection","\u002Fdocs\u002Fv3\u002Ffundamentals\u002Fsignup-protection","1.docs\u002Fv3\u002F4.fundamentals\u002F00.Signup protection",{"title":31,"path":32,"stem":33},"Login protection","\u002Fdocs\u002Fv3\u002Ffundamentals\u002Flogin-protection","1.docs\u002Fv3\u002F4.fundamentals\u002F01.Login protection",{"title":35,"path":36,"stem":37},"Access protection","\u002Fdocs\u002Fv3\u002Ffundamentals\u002Faccess-protection","1.docs\u002Fv3\u002F4.fundamentals\u002F02.Access protection",{"title":39,"path":40,"stem":41,"children":42},"Guides","\u002Fdocs\u002Fv3\u002Fguides","1.docs\u002Fv3\u002F5.guides",[43,47,51,55,59,63,67,71,75,79,83],{"title":44,"path":45,"stem":46},"Account sharing prevention","\u002Fdocs\u002Fv3\u002Fguides\u002Faccount-sharing-prevention","1.docs\u002Fv3\u002F5.guides\u002F1.Account sharing prevention",{"title":48,"path":49,"stem":50},"Web scraping prevention","\u002Fdocs\u002Fv3\u002Fguides\u002Fweb-scraping-prevention","1.docs\u002Fv3\u002F5.guides\u002F13.Web scraping prevention",{"title":52,"path":53,"stem":54},"Ban enforcement","\u002Fdocs\u002Fv3\u002Fguides\u002Fban-enforcement","1.docs\u002Fv3\u002F5.guides\u002F14.Ban enforcement",{"title":56,"path":57,"stem":58},"Chargeback dispute","\u002Fdocs\u002Fv3\u002Fguides\u002Fchargeback-dispute","1.docs\u002Fv3\u002F5.guides\u002F15.Chargeback dispute",{"title":60,"path":61,"stem":62},"Multi-accounting prevention","\u002Fdocs\u002Fv3\u002Fguides\u002Fmulti-accounting-prevention","1.docs\u002Fv3\u002F5.guides\u002F16.Multi-accounting prevention",{"title":64,"path":65,"stem":66},"Account takeover prevention","\u002Fdocs\u002Fv3\u002Fguides\u002Faccount-takeover-prevention","1.docs\u002Fv3\u002F5.guides\u002F2.Account takeover prevention",{"title":68,"path":69,"stem":70},"Risky transaction prevention","\u002Fdocs\u002Fv3\u002Fguides\u002Frisky-transaction-prevention","1.docs\u002Fv3\u002F5.guides\u002F20.Risky transaction prevention",{"title":72,"path":73,"stem":74},"Fake account detection","\u002Fdocs\u002Fv3\u002Fguides\u002Ffake-account-detection","1.docs\u002Fv3\u002F5.guides\u002F3.Fake account detection",{"title":76,"path":77,"stem":78},"Bot detection","\u002Fdocs\u002Fv3\u002Fguides\u002Fbot-detection","1.docs\u002Fv3\u002F5.guides\u002F4.Bot detection",{"title":80,"path":81,"stem":82},"Card testing prevention","\u002Fdocs\u002Fv3\u002Fguides\u002Fcard-testing-prevention","1.docs\u002Fv3\u002F5.guides\u002F5.Card testing prevention",{"title":84,"path":85,"stem":86},"Incentive abuse prevention","\u002Fdocs\u002Fv3\u002Fguides\u002Fincentive-abuse-prevention","1.docs\u002Fv3\u002F5.guides\u002F9.Incentive abuse prevention",{"title":88,"path":89,"stem":90,"children":91,"page":188},"Concepts","\u002Fdocs\u002Fv3\u002Fconcepts","1.docs\u002Fv3\u002F6.concepts",[92,96,100,104,108,112,116,120,124,128,132,136,140,144,148,152,156,160,164,168,172,176,180,184],{"title":93,"path":94,"stem":95},"Evaluations","\u002Fdocs\u002Fv3\u002Fconcepts\u002Fevaluations","1.docs\u002Fv3\u002F6.concepts\u002F01.evaluations",{"title":97,"path":98,"stem":99},"Actions","\u002Fdocs\u002Fv3\u002Fconcepts\u002Factions","1.docs\u002Fv3\u002F6.concepts\u002F02.actions",{"title":101,"path":102,"stem":103},"Signals","\u002Fdocs\u002Fv3\u002Fconcepts\u002Fsignals","1.docs\u002Fv3\u002F6.concepts\u002F03.signals",{"title":105,"path":106,"stem":107},"Checks","\u002Fdocs\u002Fv3\u002Fconcepts\u002Fchecks","1.docs\u002Fv3\u002F6.concepts\u002F04.checks",{"title":109,"path":110,"stem":111},"Risks","\u002Fdocs\u002Fv3\u002Fconcepts\u002Frisks","1.docs\u002Fv3\u002F6.concepts\u002F05.risks",{"title":113,"path":114,"stem":115},"Verdicts","\u002Fdocs\u002Fv3\u002Fconcepts\u002Fverdicts","1.docs\u002Fv3\u002F6.concepts\u002F06.verdicts",{"title":117,"path":118,"stem":119},"Policies","\u002Fdocs\u002Fv3\u002Fconcepts\u002Fpolicies","1.docs\u002Fv3\u002F6.concepts\u002F07.policies",{"title":121,"path":122,"stem":123},"Challenges","\u002Fdocs\u002Fv3\u002Fconcepts\u002Fchallenges","1.docs\u002Fv3\u002F6.concepts\u002F08.challenges",{"title":125,"path":126,"stem":127},"Concurrency","\u002Fdocs\u002Fv3\u002Fconcepts\u002Fconcurrency","1.docs\u002Fv3\u002F6.concepts\u002F09.concurrency",{"title":129,"path":130,"stem":131},"Impossible travel","\u002Fdocs\u002Fv3\u002Fconcepts\u002Fimpossible-travel","1.docs\u002Fv3\u002F6.concepts\u002F10.impossible-travel",{"title":133,"path":134,"stem":135},"Bots","\u002Fdocs\u002Fv3\u002Fconcepts\u002Fbots","1.docs\u002Fv3\u002F6.concepts\u002F11.bots",{"title":137,"path":138,"stem":139},"Devices","\u002Fdocs\u002Fv3\u002Fconcepts\u002Fdevices","1.docs\u002Fv3\u002F6.concepts\u002F12.devices",{"title":141,"path":142,"stem":143},"Fingerprints","\u002Fdocs\u002Fv3\u002Fconcepts\u002Ffingerprints","1.docs\u002Fv3\u002F6.concepts\u002F13.fingerprints",{"title":145,"path":146,"stem":147},"People","\u002Fdocs\u002Fv3\u002Fconcepts\u002Fpeople","1.docs\u002Fv3\u002F6.concepts\u002F14.people",{"title":149,"path":150,"stem":151},"Lists","\u002Fdocs\u002Fv3\u002Fconcepts\u002Flists","1.docs\u002Fv3\u002F6.concepts\u002F15.lists",{"title":153,"path":154,"stem":155},"Account takeover","\u002Fdocs\u002Fv3\u002Fconcepts\u002Faccount-takeover","1.docs\u002Fv3\u002F6.concepts\u002F16.account-takeover",{"title":157,"path":158,"stem":159},"Account sharing","\u002Fdocs\u002Fv3\u002Fconcepts\u002Faccount-sharing","1.docs\u002Fv3\u002F6.concepts\u002F17.account-sharing",{"title":161,"path":162,"stem":163},"Fake account","\u002Fdocs\u002Fv3\u002Fconcepts\u002Ffake-account","1.docs\u002Fv3\u002F6.concepts\u002F18.fake-account",{"title":165,"path":166,"stem":167},"Scraping","\u002Fdocs\u002Fv3\u002Fconcepts\u002Fscraping","1.docs\u002Fv3\u002F6.concepts\u002F19.scraping",{"title":169,"path":170,"stem":171},"Linked accounts","\u002Fdocs\u002Fv3\u002Fconcepts\u002Flinked-accounts","1.docs\u002Fv3\u002F6.concepts\u002F20.linked-accounts",{"title":173,"path":174,"stem":175},"New IP","\u002Fdocs\u002Fv3\u002Fconcepts\u002Fip","1.docs\u002Fv3\u002F6.concepts\u002F21.ip",{"title":177,"path":178,"stem":179},"Anonymizing network","\u002Fdocs\u002Fv3\u002Fconcepts\u002Fanonymizing-network","1.docs\u002Fv3\u002F6.concepts\u002F22.anonymizing-network",{"title":181,"path":182,"stem":183},"Email quality","\u002Fdocs\u002Fv3\u002Fconcepts\u002Femail","1.docs\u002Fv3\u002F6.concepts\u002F23.email",{"title":185,"path":186,"stem":187},"Velocity","\u002Fdocs\u002Fv3\u002Fconcepts\u002Fvelocity","1.docs\u002Fv3\u002F6.concepts\u002F24.velocity",false,{"title":190,"path":191,"stem":192,"children":193,"page":188},"Advanced","\u002Fdocs\u002Fv3\u002Fadvanced","1.docs\u002Fv3\u002F7.Advanced",[194],{"title":195,"path":196,"stem":197},"Proxy setup","\u002Fdocs\u002Fv3\u002Fadvanced\u002Fproxy-setup","1.docs\u002Fv3\u002F7.Advanced\u002F1.Proxy-setup",{"title":199,"path":200,"stem":201,"children":202},"Integrations","\u002Fdocs\u002Fv3\u002Fintegrations","1.docs\u002Fv3\u002F8.integrations",[203,207,211,215],{"title":204,"path":205,"stem":206},"Kajabi","\u002Fdocs\u002Fv3\u002Fintegrations\u002Fkajabi-account-sharing-prevention","1.docs\u002Fv3\u002F8.integrations\u002F1.Kajabi account sharing prevention",{"title":208,"path":209,"stem":210},"Teachable","\u002Fdocs\u002Fv3\u002Fintegrations\u002Fteachable-account-sharing-prevention","1.docs\u002Fv3\u002F8.integrations\u002F2.Teachable account sharing prevention",{"title":212,"path":213,"stem":214},"Thinkific","\u002Fdocs\u002Fv3\u002Fintegrations\u002Fthinkific-account-sharing-prevention","1.docs\u002Fv3\u002F8.integrations\u002F3.Thinkific account sharing prevention",{"title":216,"path":217,"stem":218},"LearnWorlds","\u002Fdocs\u002Fv3\u002Fintegrations\u002Flearnworlds-account-sharing-prevention","1.docs\u002Fv3\u002F8.integrations\u002F4.LearnWorlds account sharing prevention",{"id":220,"title":221,"body":222,"description":491,"extension":492,"meta":493,"navigation":494,"path":217,"rawbody":495,"seo":496,"stem":218,"__hash__":497},"docsv3\u002F1.docs\u002Fv3\u002F8.integrations\u002F4.LearnWorlds account sharing prevention.md","LearnWorlds account sharing prevention",{"type":223,"value":224,"toc":485},"minimark",[225,230,234,241,246,258,270,376,394,400,404,411,426,429,435,439,445,451,461,465,481],[226,227,229],"h1",{"id":228},"learnworlds-account-sharing-prevention-with-rupt","LearnWorlds account sharing prevention with Rupt",[231,232,233],"p",{},"LearnWorlds has no built-in account sharing or password sharing protection. Rupt adds it with a single script tag: paste it into LearnWorlds' logged-in custom code, add a policy in the Rupt dashboard, and Rupt detects concurrent sessions, challenges the extra viewer, and logs unauthorized devices out. No server code required.",[231,235,236,237,240],{},"This guide assumes you've already chosen Rupt and want to wire it into LearnWorlds. For the background on why account sharing happens and how detection works, see ",[238,239,44],"a",{"href":45},".",[242,243,245],"h2",{"id":244},"step-1-add-the-rupt-script-to-learnworlds","Step 1: Add the Rupt script to LearnWorlds",[231,247,248,249,253,254,257],{},"The script reads the signed-in user from the ",[250,251,252],"code",{},"data-user-id"," and ",[250,255,256],{},"data-user-email"," values, which LearnWorlds fills in from its own template variables. It triggers a challenge when one of your policies fires.",[231,259,260,261,265,266,269],{},"In LearnWorlds, go to ",[262,263,264],"strong",{},"Site builder → Custom Code",", open the ",[250,267,268],{},"\u003Chead> logged in (html)"," tab, paste this in, and save:",[271,272,277],"pre",{"className":273,"code":274,"language":275,"meta":276,"style":276},"language-html shiki shiki-themes material-theme-lighter one-dark-pro monokai","\u003Cscript\n  src=\"https:\u002F\u002Fcdn.rupt.dev\u002Fintegrations\u002Flearnworlds\u002F1.1.0\u002Flearnworlds.js\"\n  data-client-id=\"xxxx-xxxx-xxxx-xxxx\"\n  data-user-id=\"{{ USER.ID }}\"\n  data-user-email=\"{{ USER.EMAIL }}\"\n  async\n>\u003C\u002Fscript>\n","html","",[250,278,279,292,313,328,343,358,364],{"__ignoreMap":276},[280,281,284,288],"span",{"class":282,"line":283},"line",1,[280,285,287],{"class":286},"shEKG","\u003C",[280,289,291],{"class":290},"slwgX","script\n",[280,293,295,299,302,306,310],{"class":282,"line":294},2,[280,296,298],{"class":297},"sXIpk","  src",[280,300,301],{"class":286},"=",[280,303,305],{"class":304},"s9QZx","\"",[280,307,309],{"class":308},"siibJ","https:\u002F\u002Fcdn.rupt.dev\u002Fintegrations\u002Flearnworlds\u002F1.1.0\u002Flearnworlds.js",[280,311,312],{"class":304},"\"\n",[280,314,316,319,321,323,326],{"class":282,"line":315},3,[280,317,318],{"class":297},"  data-client-id",[280,320,301],{"class":286},[280,322,305],{"class":304},[280,324,325],{"class":308},"xxxx-xxxx-xxxx-xxxx",[280,327,312],{"class":304},[280,329,331,334,336,338,341],{"class":282,"line":330},4,[280,332,333],{"class":297},"  data-user-id",[280,335,301],{"class":286},[280,337,305],{"class":304},[280,339,340],{"class":308},"{{ USER.ID }}",[280,342,312],{"class":304},[280,344,346,349,351,353,356],{"class":282,"line":345},5,[280,347,348],{"class":297},"  data-user-email",[280,350,301],{"class":286},[280,352,305],{"class":304},[280,354,355],{"class":308},"{{ USER.EMAIL }}",[280,357,312],{"class":304},[280,359,361],{"class":282,"line":360},6,[280,362,363],{"class":297},"  async\n",[280,365,367,370,373],{"class":282,"line":366},7,[280,368,369],{"class":286},">\u003C\u002F",[280,371,372],{"class":290},"script",[280,374,375],{"class":286},">\n",[231,377,378,379,381,382,388,389,253,391,393],{},"Swap ",[250,380,325],{}," for your client ID from the ",[238,383,387],{"href":384,"rel":385},"https:\u002F\u002Fapp.rupt.dev",[386],"nofollow","Rupt dashboard",". Leave the ",[250,390,340],{},[250,392,355],{}," values as they are: LearnWorlds replaces them with the real user when the page loads.",[231,395,396,397,399],{},"Rupt's ",[238,398,35],{"href":36}," handles detection, the challenge, owner verification, and device capping on the client. No extra code on your side.",[242,401,403],{"id":402},"step-2-configure-your-account-sharing-policies","Step 2: Configure your account sharing policies",[231,405,406,407,410],{},"Policies are what actually catch sharing. Without at least one policy on the ",[250,408,409],{},"access"," trigger, the script runs but never challenges anyone.",[231,412,413,414,419,420,422,423,425],{},"A policy has a trigger (the event it runs on) and a verdict. In your ",[238,415,418],{"href":416,"rel":417},"https:\u002F\u002Fapp.rupt.dev\u002Fpolicies",[386],"policies dashboard",", add a policy on the ",[250,421,409],{}," trigger that challenges when it sees concurrent sessions or too many devices. The ",[238,424,44],{"href":45}," guide has the exact policies to start from.",[231,427,428],{},"Set the challenge success URL to your signup or offer page so the extra viewer can start their own subscription.",[231,430,431,432,434],{},"If no sessions show up in your dashboard after a few logins, check that the script is in the ",[250,433,268],{}," tab (not the logged-out one) and that the client ID matches the one in your Rupt dashboard.",[242,436,438],{"id":437},"frequently-asked-questions","Frequently asked questions",[231,440,441,444],{},[262,442,443],{},"Does LearnWorlds prevent account sharing?","\nLearnWorlds has no native account sharing or password sharing protection. You add it by installing Rupt, which detects concurrent sessions and challenges unauthorized viewers through a script in LearnWorlds' logged-in custom code.",[231,446,447,450],{},[262,448,449],{},"How do I stop password sharing on LearnWorlds?","\nAdd the Rupt script under Site builder → Custom Code in the logged-in head tab, then create an access policy in the Rupt dashboard that triggers on concurrent sessions. Rupt handles detection, the challenge, and device logout automatically.",[231,452,453,456,457,460],{},[262,454,455],{},"Does Rupt work with LearnWorlds' existing login?","\nYes. The script reads the signed-in user from LearnWorlds' own template variables, so no changes to LearnWorlds' login or member area are needed. It loads with ",[250,458,459],{},"async",", so it doesn't block your pages.",[242,462,464],{"id":463},"related","Related",[466,467,468,473,477],"ul",{},[469,470,471],"li",{},[238,472,44],{"href":45},[469,474,475],{},[238,476,35],{"href":36},[469,478,479],{},[238,480,18],{"href":19},[482,483,484],"style",{},"html pre.shiki code .shEKG, html code.shiki .shEKG{--shiki-light:#39ADB5;--shiki-default:#ABB2BF;--shiki-dark:#F8F8F2}html pre.shiki code .slwgX, html code.shiki .slwgX{--shiki-light:#E53935;--shiki-default:#E06C75;--shiki-dark:#F92672}html pre.shiki code .sXIpk, html code.shiki .sXIpk{--shiki-light:#9C3EDA;--shiki-default:#D19A66;--shiki-dark:#A6E22E}html pre.shiki code .s9QZx, html code.shiki .s9QZx{--shiki-light:#39ADB5;--shiki-default:#98C379;--shiki-dark:#E6DB74}html pre.shiki code .siibJ, html code.shiki .siibJ{--shiki-light:#91B859;--shiki-default:#98C379;--shiki-dark:#E6DB74}html .light .shiki span {color: var(--shiki-light);background: var(--shiki-light-bg);font-style: var(--shiki-light-font-style);font-weight: var(--shiki-light-font-weight);text-decoration: var(--shiki-light-text-decoration);}html.light .shiki span {color: var(--shiki-light);background: var(--shiki-light-bg);font-style: var(--shiki-light-font-style);font-weight: var(--shiki-light-font-weight);text-decoration: var(--shiki-light-text-decoration);}html .default .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-style: var(--shiki-dark-font-style);font-weight: var(--shiki-dark-font-weight);text-decoration: var(--shiki-dark-text-decoration);}html.dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-style: var(--shiki-dark-font-style);font-weight: var(--shiki-dark-font-weight);text-decoration: var(--shiki-dark-text-decoration);}",{"title":276,"searchDepth":294,"depth":294,"links":486},[487,488,489,490],{"id":244,"depth":294,"text":245},{"id":402,"depth":294,"text":403},{"id":437,"depth":294,"text":438},{"id":463,"depth":294,"text":464},"LearnWorlds has no native account sharing protection. Add Rupt with one script tag to detect and stop account and password sharing on your courses.","md",{},{"title":216},"---\ntitle: LearnWorlds account sharing prevention\ndescription: LearnWorlds has no native account sharing protection. Add Rupt with one script tag to detect and stop account and password sharing on your courses.\nnavigation:\n  title: LearnWorlds\n---\n\n# LearnWorlds account sharing prevention with Rupt\n\nLearnWorlds has no built-in account sharing or password sharing protection. Rupt adds it with a single script tag: paste it into LearnWorlds' logged-in custom code, add a policy in the Rupt dashboard, and Rupt detects concurrent sessions, challenges the extra viewer, and logs unauthorized devices out. No server code required.\n\nThis guide assumes you've already chosen Rupt and want to wire it into LearnWorlds. For the background on why account sharing happens and how detection works, see [Account sharing prevention](\u002Fdocs\u002Fv3\u002Fguides\u002Faccount-sharing-prevention).\n\n## Step 1: Add the Rupt script to LearnWorlds\n\nThe script reads the signed-in user from the `data-user-id` and `data-user-email` values, which LearnWorlds fills in from its own template variables. It triggers a challenge when one of your policies fires.\n\nIn LearnWorlds, go to **Site builder → Custom Code**, open the `\u003Chead> logged in (html)` tab, paste this in, and save:\n\n```html\n\u003Cscript\n  src=\"https:\u002F\u002Fcdn.rupt.dev\u002Fintegrations\u002Flearnworlds\u002F1.1.0\u002Flearnworlds.js\"\n  data-client-id=\"xxxx-xxxx-xxxx-xxxx\"\n  data-user-id=\"{{ USER.ID }}\"\n  data-user-email=\"{{ USER.EMAIL }}\"\n  async\n>\u003C\u002Fscript>\n```\n\nSwap `xxxx-xxxx-xxxx-xxxx` for your client ID from the [Rupt dashboard](https:\u002F\u002Fapp.rupt.dev). Leave the `{{ USER.ID }}` and `{{ USER.EMAIL }}` values as they are: LearnWorlds replaces them with the real user when the page loads.\n\nRupt's [Access protection](\u002Fdocs\u002Fv3\u002Ffundamentals\u002Faccess-protection) handles detection, the challenge, owner verification, and device capping on the client. No extra code on your side.\n\n## Step 2: Configure your account sharing policies\n\nPolicies are what actually catch sharing. Without at least one policy on the `access` trigger, the script runs but never challenges anyone.\n\nA policy has a trigger (the event it runs on) and a verdict. In your [policies dashboard](https:\u002F\u002Fapp.rupt.dev\u002Fpolicies), add a policy on the `access` trigger that challenges when it sees concurrent sessions or too many devices. The [Account sharing prevention](\u002Fdocs\u002Fv3\u002Fguides\u002Faccount-sharing-prevention) guide has the exact policies to start from.\n\nSet the challenge success URL to your signup or offer page so the extra viewer can start their own subscription.\n\nIf no sessions show up in your dashboard after a few logins, check that the script is in the `\u003Chead> logged in (html)` tab (not the logged-out one) and that the client ID matches the one in your Rupt dashboard.\n\n## Frequently asked questions\n\n**Does LearnWorlds prevent account sharing?**\nLearnWorlds has no native account sharing or password sharing protection. You add it by installing Rupt, which detects concurrent sessions and challenges unauthorized viewers through a script in LearnWorlds' logged-in custom code.\n\n**How do I stop password sharing on LearnWorlds?**\nAdd the Rupt script under Site builder → Custom Code in the logged-in head tab, then create an access policy in the Rupt dashboard that triggers on concurrent sessions. Rupt handles detection, the challenge, and device logout automatically.\n\n**Does Rupt work with LearnWorlds' existing login?**\nYes. The script reads the signed-in user from LearnWorlds' own template variables, so no changes to LearnWorlds' login or member area are needed. It loads with `async`, so it doesn't block your pages.\n\n## Related\n\n- [Account sharing prevention](\u002Fdocs\u002Fv3\u002Fguides\u002Faccount-sharing-prevention)\n- [Access protection](\u002Fdocs\u002Fv3\u002Ffundamentals\u002Faccess-protection)\n- [Challenge flow](\u002Fdocs\u002Fv3\u002Fchallenge-flow)\n",{"title":221,"description":491},"fw-rfEvKykUBL6HOz9N8cypKO56kf6SB1w6cuUsWqfU",1781135905956]