nodebb-plugin-sso-facebook 3.6.4 → 3.6.6
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/.gitattributes +22 -22
- package/LICENSE +7 -7
- package/README.md +6 -6
- package/package.json +2 -2
- package/plugin.json +29 -29
- package/static/less/style.less +27 -27
- package/static/lib/admin.js +25 -25
- package/templates/admin/plugins/sso-facebook.tpl +56 -56
- package/templates/partials/sso-facebook/email.tpl +7 -7
- package/templates/plugins/sso-facebook/deauth.tpl +16 -16
package/.gitattributes
CHANGED
|
@@ -1,22 +1,22 @@
|
|
|
1
|
-
# Auto detect text files and perform LF normalization
|
|
2
|
-
* text=auto
|
|
3
|
-
|
|
4
|
-
# Custom for Visual Studio
|
|
5
|
-
*.cs diff=csharp
|
|
6
|
-
*.sln merge=union
|
|
7
|
-
*.csproj merge=union
|
|
8
|
-
*.vbproj merge=union
|
|
9
|
-
*.fsproj merge=union
|
|
10
|
-
*.dbproj merge=union
|
|
11
|
-
|
|
12
|
-
# Standard to msysgit
|
|
13
|
-
*.doc diff=astextplain
|
|
14
|
-
*.DOC diff=astextplain
|
|
15
|
-
*.docx diff=astextplain
|
|
16
|
-
*.DOCX diff=astextplain
|
|
17
|
-
*.dot diff=astextplain
|
|
18
|
-
*.DOT diff=astextplain
|
|
19
|
-
*.pdf diff=astextplain
|
|
20
|
-
*.PDF diff=astextplain
|
|
21
|
-
*.rtf diff=astextplain
|
|
22
|
-
*.RTF diff=astextplain
|
|
1
|
+
# Auto detect text files and perform LF normalization
|
|
2
|
+
* text=auto
|
|
3
|
+
|
|
4
|
+
# Custom for Visual Studio
|
|
5
|
+
*.cs diff=csharp
|
|
6
|
+
*.sln merge=union
|
|
7
|
+
*.csproj merge=union
|
|
8
|
+
*.vbproj merge=union
|
|
9
|
+
*.fsproj merge=union
|
|
10
|
+
*.dbproj merge=union
|
|
11
|
+
|
|
12
|
+
# Standard to msysgit
|
|
13
|
+
*.doc diff=astextplain
|
|
14
|
+
*.DOC diff=astextplain
|
|
15
|
+
*.docx diff=astextplain
|
|
16
|
+
*.DOCX diff=astextplain
|
|
17
|
+
*.dot diff=astextplain
|
|
18
|
+
*.DOT diff=astextplain
|
|
19
|
+
*.pdf diff=astextplain
|
|
20
|
+
*.PDF diff=astextplain
|
|
21
|
+
*.rtf diff=astextplain
|
|
22
|
+
*.RTF diff=astextplain
|
package/LICENSE
CHANGED
|
@@ -1,8 +1,8 @@
|
|
|
1
|
-
Copyright (c) 2013-2014, psychobunny <psycho.bunny@hotmail.com>
|
|
2
|
-
All rights reserved.
|
|
3
|
-
|
|
4
|
-
Redistribution and use in source and binary forms, with or without modification, are permitted provided that the following conditions are met:
|
|
5
|
-
|
|
6
|
-
Redistributions of source code must retain the above copyright notice, this list of conditions and the following disclaimer.
|
|
7
|
-
Redistributions in binary form must reproduce the above copyright notice, this list of conditions and the following disclaimer in the documentation and/or other materials provided with the distribution.
|
|
1
|
+
Copyright (c) 2013-2014, psychobunny <psycho.bunny@hotmail.com>
|
|
2
|
+
All rights reserved.
|
|
3
|
+
|
|
4
|
+
Redistribution and use in source and binary forms, with or without modification, are permitted provided that the following conditions are met:
|
|
5
|
+
|
|
6
|
+
Redistributions of source code must retain the above copyright notice, this list of conditions and the following disclaimer.
|
|
7
|
+
Redistributions in binary form must reproduce the above copyright notice, this list of conditions and the following disclaimer in the documentation and/or other materials provided with the distribution.
|
|
8
8
|
THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
|
package/README.md
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
|
-
# NodeBB Facebook SSO
|
|
2
|
-
|
|
3
|
-
NodeBB Plugin that allows users to login/register via their Facebook account.
|
|
4
|
-
|
|
5
|
-
## Installation
|
|
6
|
-
|
|
1
|
+
# NodeBB Facebook SSO
|
|
2
|
+
|
|
3
|
+
NodeBB Plugin that allows users to login/register via their Facebook account.
|
|
4
|
+
|
|
5
|
+
## Installation
|
|
6
|
+
|
|
7
7
|
npm install nodebb-plugin-sso-facebook
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "nodebb-plugin-sso-facebook",
|
|
3
|
-
"version": "3.6.
|
|
3
|
+
"version": "3.6.6",
|
|
4
4
|
"description": "NodeBB Facebook SSO",
|
|
5
5
|
"main": "library.js",
|
|
6
6
|
"repository": {
|
|
@@ -29,6 +29,6 @@
|
|
|
29
29
|
"passport-facebook": "~1.0.2"
|
|
30
30
|
},
|
|
31
31
|
"nbbpm": {
|
|
32
|
-
"compatibility": "^1.17.0"
|
|
32
|
+
"compatibility": "^1.17.0 || ^2.0.0"
|
|
33
33
|
}
|
|
34
34
|
}
|
package/plugin.json
CHANGED
|
@@ -1,29 +1,29 @@
|
|
|
1
|
-
{
|
|
2
|
-
"id": "nodebb-plugin-sso-facebook",
|
|
3
|
-
"name": "NodeBB Facebook SSO",
|
|
4
|
-
"description": "NodeBB Plugin that allows users to login/register via their Facebook account.",
|
|
5
|
-
"url": "https://github.com/julianlam/nodebb-plugin-sso-facebook",
|
|
6
|
-
"library": "./library.js",
|
|
7
|
-
"templates": "templates",
|
|
8
|
-
"hooks": [
|
|
9
|
-
{ "hook": "static:app.load", "method": "init" },
|
|
10
|
-
{ "hook": "filter:auth.init", "method": "getStrategy" },
|
|
11
|
-
{ "hook": "filter:auth.list", "method": "getAssociation" },
|
|
12
|
-
{ "hook": "filter:admin.header.build", "method": "addMenuItem" },
|
|
13
|
-
{ "hook": "static:user.delete", "method": "deleteUserData" },
|
|
14
|
-
{ "hook": "filter:register.interstitial", "method": "prepareInterstitial" },
|
|
15
|
-
{ "hook": "filter:user.whitelistFields", "method": "appendUserHashWhitelist" }
|
|
16
|
-
],
|
|
17
|
-
"modules": {
|
|
18
|
-
"../admin/plugins/sso-facebook.js": "static/lib/admin.js"
|
|
19
|
-
},
|
|
20
|
-
"scripts": [
|
|
21
|
-
"static/lib/main.js"
|
|
22
|
-
],
|
|
23
|
-
"less": [
|
|
24
|
-
"static/less/style.less"
|
|
25
|
-
],
|
|
26
|
-
"staticDirs": {
|
|
27
|
-
"images": "static/images"
|
|
28
|
-
}
|
|
29
|
-
}
|
|
1
|
+
{
|
|
2
|
+
"id": "nodebb-plugin-sso-facebook",
|
|
3
|
+
"name": "NodeBB Facebook SSO",
|
|
4
|
+
"description": "NodeBB Plugin that allows users to login/register via their Facebook account.",
|
|
5
|
+
"url": "https://github.com/julianlam/nodebb-plugin-sso-facebook",
|
|
6
|
+
"library": "./library.js",
|
|
7
|
+
"templates": "templates",
|
|
8
|
+
"hooks": [
|
|
9
|
+
{ "hook": "static:app.load", "method": "init" },
|
|
10
|
+
{ "hook": "filter:auth.init", "method": "getStrategy" },
|
|
11
|
+
{ "hook": "filter:auth.list", "method": "getAssociation" },
|
|
12
|
+
{ "hook": "filter:admin.header.build", "method": "addMenuItem" },
|
|
13
|
+
{ "hook": "static:user.delete", "method": "deleteUserData" },
|
|
14
|
+
{ "hook": "filter:register.interstitial", "method": "prepareInterstitial" },
|
|
15
|
+
{ "hook": "filter:user.whitelistFields", "method": "appendUserHashWhitelist" }
|
|
16
|
+
],
|
|
17
|
+
"modules": {
|
|
18
|
+
"../admin/plugins/sso-facebook.js": "static/lib/admin.js"
|
|
19
|
+
},
|
|
20
|
+
"scripts": [
|
|
21
|
+
"static/lib/main.js"
|
|
22
|
+
],
|
|
23
|
+
"less": [
|
|
24
|
+
"static/less/style.less"
|
|
25
|
+
],
|
|
26
|
+
"staticDirs": {
|
|
27
|
+
"images": "static/images"
|
|
28
|
+
}
|
|
29
|
+
}
|
package/static/less/style.less
CHANGED
|
@@ -1,28 +1,28 @@
|
|
|
1
|
-
.facebook-login-button {
|
|
2
|
-
display: inline-block;
|
|
3
|
-
// background-color: #4267B2;
|
|
4
|
-
}
|
|
5
|
-
|
|
6
|
-
.alt-logins .facebook a div {
|
|
7
|
-
border-radius: 3px;
|
|
8
|
-
border: 1px solid #4267B2;
|
|
9
|
-
color: #4267B2;
|
|
10
|
-
padding: 3px;
|
|
11
|
-
background-color: #fff;
|
|
12
|
-
transition: all 100ms linear;
|
|
13
|
-
|
|
14
|
-
img {
|
|
15
|
-
width: 32px;
|
|
16
|
-
height: 32px;
|
|
17
|
-
}
|
|
18
|
-
|
|
19
|
-
span {
|
|
20
|
-
margin: 0 0.7em;
|
|
21
|
-
font-weight: 600;
|
|
22
|
-
}
|
|
23
|
-
|
|
24
|
-
&:hover {
|
|
25
|
-
background-color: #4267B2;
|
|
26
|
-
color: #fff;
|
|
27
|
-
}
|
|
1
|
+
.facebook-login-button {
|
|
2
|
+
display: inline-block;
|
|
3
|
+
// background-color: #4267B2;
|
|
4
|
+
}
|
|
5
|
+
|
|
6
|
+
.alt-logins .facebook a div {
|
|
7
|
+
border-radius: 3px;
|
|
8
|
+
border: 1px solid #4267B2;
|
|
9
|
+
color: #4267B2;
|
|
10
|
+
padding: 3px;
|
|
11
|
+
background-color: #fff;
|
|
12
|
+
transition: all 100ms linear;
|
|
13
|
+
|
|
14
|
+
img {
|
|
15
|
+
width: 32px;
|
|
16
|
+
height: 32px;
|
|
17
|
+
}
|
|
18
|
+
|
|
19
|
+
span {
|
|
20
|
+
margin: 0 0.7em;
|
|
21
|
+
font-weight: 600;
|
|
22
|
+
}
|
|
23
|
+
|
|
24
|
+
&:hover {
|
|
25
|
+
background-color: #4267B2;
|
|
26
|
+
color: #fff;
|
|
27
|
+
}
|
|
28
28
|
}
|
package/static/lib/admin.js
CHANGED
|
@@ -1,26 +1,26 @@
|
|
|
1
|
-
define('admin/plugins/sso-facebook', ['settings'], function(Settings) {
|
|
2
|
-
'use strict';
|
|
3
|
-
/* globals $, app, socket, require */
|
|
4
|
-
|
|
5
|
-
var ACP = {};
|
|
6
|
-
|
|
7
|
-
ACP.init = function() {
|
|
8
|
-
Settings.load('sso-facebook', $('.sso-facebook-settings'));
|
|
9
|
-
|
|
10
|
-
$('#save').on('click', function() {
|
|
11
|
-
Settings.save('sso-facebook', $('.sso-facebook-settings'), function() {
|
|
12
|
-
app.alert({
|
|
13
|
-
type: 'success',
|
|
14
|
-
alert_id: 'sso-facebook-saved',
|
|
15
|
-
title: 'Settings Saved',
|
|
16
|
-
message: 'Please reload your NodeBB to apply these settings',
|
|
17
|
-
clickfn: function() {
|
|
18
|
-
socket.emit('admin.reload');
|
|
19
|
-
}
|
|
20
|
-
});
|
|
21
|
-
});
|
|
22
|
-
});
|
|
23
|
-
};
|
|
24
|
-
|
|
25
|
-
return ACP;
|
|
1
|
+
define('admin/plugins/sso-facebook', ['settings'], function(Settings) {
|
|
2
|
+
'use strict';
|
|
3
|
+
/* globals $, app, socket, require */
|
|
4
|
+
|
|
5
|
+
var ACP = {};
|
|
6
|
+
|
|
7
|
+
ACP.init = function() {
|
|
8
|
+
Settings.load('sso-facebook', $('.sso-facebook-settings'));
|
|
9
|
+
|
|
10
|
+
$('#save').on('click', function() {
|
|
11
|
+
Settings.save('sso-facebook', $('.sso-facebook-settings'), function() {
|
|
12
|
+
app.alert({
|
|
13
|
+
type: 'success',
|
|
14
|
+
alert_id: 'sso-facebook-saved',
|
|
15
|
+
title: 'Settings Saved',
|
|
16
|
+
message: 'Please reload your NodeBB to apply these settings',
|
|
17
|
+
clickfn: function() {
|
|
18
|
+
socket.emit('admin.reload');
|
|
19
|
+
}
|
|
20
|
+
});
|
|
21
|
+
});
|
|
22
|
+
});
|
|
23
|
+
};
|
|
24
|
+
|
|
25
|
+
return ACP;
|
|
26
26
|
});
|
|
@@ -1,56 +1,56 @@
|
|
|
1
|
-
<div class="row">
|
|
2
|
-
<div class="col-xs-12">
|
|
3
|
-
<div class="panel panel-default">
|
|
4
|
-
<div class="panel-heading">Facebook Social Authentication</div>
|
|
5
|
-
<div class="panel-body">
|
|
6
|
-
<p>
|
|
7
|
-
Create a <strong>Facebook Application</strong> via the
|
|
8
|
-
<a href="https://developers.facebook.com/apps/">Facebook Developers Page</a> and
|
|
9
|
-
then paste your application details here.
|
|
10
|
-
</p>
|
|
11
|
-
<ul>
|
|
12
|
-
<li>
|
|
13
|
-
You will need to enable <strong>"Client OAuth Login"</strong> and <strong>"Web OAuth Login"</strong>
|
|
14
|
-
from the "Facebook Login" product
|
|
15
|
-
</li>
|
|
16
|
-
<li>
|
|
17
|
-
You will need to paste <code>{baseUrl}/auth/facebook/callback</code> into the
|
|
18
|
-
<strong>"Valid OAuth Redirect URIs"</strong> field.
|
|
19
|
-
</li>
|
|
20
|
-
</ul>
|
|
21
|
-
</p>
|
|
22
|
-
<form role="form" class="sso-facebook-settings">
|
|
23
|
-
<div class="form-group">
|
|
24
|
-
<label for="app_id">Application ID</label>
|
|
25
|
-
<input type="text" id="app_id" name="app_id" title="Application ID" class="form-control" placeholder="Application ID"><br />
|
|
26
|
-
</div>
|
|
27
|
-
<div class="form-group">
|
|
28
|
-
<label for="secret">Secret</label>
|
|
29
|
-
<input type="text" id="secret" name="secret" title="Secret" class="form-control" placeholder="Secret">
|
|
30
|
-
</div>
|
|
31
|
-
<div class="checkbox">
|
|
32
|
-
<label for="autoconfirm" class="mdl-switch mdl-js-switch mdl-js-ripple-effect">
|
|
33
|
-
<input type="checkbox" class="mdl-switch__input" id="autoconfirm" name="autoconfirm" />
|
|
34
|
-
<span class="mdl-switch__label">Skip email verification for people who register using SSO?</span>
|
|
35
|
-
</label>
|
|
36
|
-
</div>
|
|
37
|
-
<div class="checkbox">
|
|
38
|
-
<label for="disableRegistration" class="mdl-switch mdl-js-switch mdl-js-ripple-effect">
|
|
39
|
-
<input type="checkbox" class="mdl-switch__input" id="disableRegistration" name="disableRegistration" />
|
|
40
|
-
<span class="mdl-switch__label">Disable user registration via SSO</span>
|
|
41
|
-
</label>
|
|
42
|
-
</div>
|
|
43
|
-
<p class="help-block">
|
|
44
|
-
Restricting registration means that only registered users can associate their account with this SSO strategy.
|
|
45
|
-
This restriction is useful if you have users bypassing registration controls by using social media accounts, or
|
|
46
|
-
if you wish to use the NodeBB registration queue.
|
|
47
|
-
</p>
|
|
48
|
-
</form>
|
|
49
|
-
</div>
|
|
50
|
-
</div>
|
|
51
|
-
</div>
|
|
52
|
-
</div>
|
|
53
|
-
|
|
54
|
-
<button id="save" class="floating-button mdl-button mdl-js-button mdl-button--fab mdl-js-ripple-effect mdl-button--colored">
|
|
55
|
-
<i class="material-icons">save</i>
|
|
56
|
-
</button>
|
|
1
|
+
<div class="row">
|
|
2
|
+
<div class="col-xs-12">
|
|
3
|
+
<div class="panel panel-default">
|
|
4
|
+
<div class="panel-heading">Facebook Social Authentication</div>
|
|
5
|
+
<div class="panel-body">
|
|
6
|
+
<p>
|
|
7
|
+
Create a <strong>Facebook Application</strong> via the
|
|
8
|
+
<a href="https://developers.facebook.com/apps/">Facebook Developers Page</a> and
|
|
9
|
+
then paste your application details here.
|
|
10
|
+
</p>
|
|
11
|
+
<ul>
|
|
12
|
+
<li>
|
|
13
|
+
You will need to enable <strong>"Client OAuth Login"</strong> and <strong>"Web OAuth Login"</strong>
|
|
14
|
+
from the "Facebook Login" product
|
|
15
|
+
</li>
|
|
16
|
+
<li>
|
|
17
|
+
You will need to paste <code>{baseUrl}/auth/facebook/callback</code> into the
|
|
18
|
+
<strong>"Valid OAuth Redirect URIs"</strong> field.
|
|
19
|
+
</li>
|
|
20
|
+
</ul>
|
|
21
|
+
</p>
|
|
22
|
+
<form role="form" class="sso-facebook-settings">
|
|
23
|
+
<div class="form-group">
|
|
24
|
+
<label for="app_id">Application ID</label>
|
|
25
|
+
<input type="text" id="app_id" name="app_id" title="Application ID" class="form-control" placeholder="Application ID"><br />
|
|
26
|
+
</div>
|
|
27
|
+
<div class="form-group">
|
|
28
|
+
<label for="secret">Secret</label>
|
|
29
|
+
<input type="text" id="secret" name="secret" title="Secret" class="form-control" placeholder="Secret">
|
|
30
|
+
</div>
|
|
31
|
+
<div class="checkbox">
|
|
32
|
+
<label for="autoconfirm" class="mdl-switch mdl-js-switch mdl-js-ripple-effect">
|
|
33
|
+
<input type="checkbox" class="mdl-switch__input" id="autoconfirm" name="autoconfirm" />
|
|
34
|
+
<span class="mdl-switch__label">Skip email verification for people who register using SSO?</span>
|
|
35
|
+
</label>
|
|
36
|
+
</div>
|
|
37
|
+
<div class="checkbox">
|
|
38
|
+
<label for="disableRegistration" class="mdl-switch mdl-js-switch mdl-js-ripple-effect">
|
|
39
|
+
<input type="checkbox" class="mdl-switch__input" id="disableRegistration" name="disableRegistration" />
|
|
40
|
+
<span class="mdl-switch__label">Disable user registration via SSO</span>
|
|
41
|
+
</label>
|
|
42
|
+
</div>
|
|
43
|
+
<p class="help-block">
|
|
44
|
+
Restricting registration means that only registered users can associate their account with this SSO strategy.
|
|
45
|
+
This restriction is useful if you have users bypassing registration controls by using social media accounts, or
|
|
46
|
+
if you wish to use the NodeBB registration queue.
|
|
47
|
+
</p>
|
|
48
|
+
</form>
|
|
49
|
+
</div>
|
|
50
|
+
</div>
|
|
51
|
+
</div>
|
|
52
|
+
</div>
|
|
53
|
+
|
|
54
|
+
<button id="save" class="floating-button mdl-button mdl-js-button mdl-button--fab mdl-js-ripple-effect mdl-button--colored">
|
|
55
|
+
<i class="material-icons">save</i>
|
|
56
|
+
</button>
|
|
@@ -1,7 +1,7 @@
|
|
|
1
|
-
<div class="form-group">
|
|
2
|
-
<label for="email">Email Address</label>
|
|
3
|
-
<input type="email" id="email" name="email" class="form-control" />
|
|
4
|
-
<p class="help-block">
|
|
5
|
-
The forum administrator has required an email address for all users registering via Facebook.
|
|
6
|
-
</p>
|
|
7
|
-
</div>
|
|
1
|
+
<div class="form-group">
|
|
2
|
+
<label for="email">Email Address</label>
|
|
3
|
+
<input type="email" id="email" name="email" class="form-control" />
|
|
4
|
+
<p class="help-block">
|
|
5
|
+
The forum administrator has required an email address for all users registering via Facebook.
|
|
6
|
+
</p>
|
|
7
|
+
</div>
|
|
@@ -1,17 +1,17 @@
|
|
|
1
|
-
<div class="col-xs-12 col-sm-8 col-sm-offset-2 col-md-6 col-md-offset-3">
|
|
2
|
-
<div class="panel panel-default">
|
|
3
|
-
<div class="panel-heading">
|
|
4
|
-
<h3 class="panel-title">[[user:sso.dissociate-confirm-title]]</h3>
|
|
5
|
-
</div>
|
|
6
|
-
<div class="panel-body">
|
|
7
|
-
[[user:sso.dissociate-confirm, {service}]]
|
|
8
|
-
|
|
9
|
-
<hr>
|
|
10
|
-
|
|
11
|
-
<form method="post">
|
|
12
|
-
<input type="hidden" name="_csrf" value="{config.csrf_token}" />
|
|
13
|
-
<button class="btn btn-danger">[[user:sso.dissociate]]</button>
|
|
14
|
-
</form>
|
|
15
|
-
</div>
|
|
16
|
-
</div>
|
|
1
|
+
<div class="col-xs-12 col-sm-8 col-sm-offset-2 col-md-6 col-md-offset-3">
|
|
2
|
+
<div class="panel panel-default">
|
|
3
|
+
<div class="panel-heading">
|
|
4
|
+
<h3 class="panel-title">[[user:sso.dissociate-confirm-title]]</h3>
|
|
5
|
+
</div>
|
|
6
|
+
<div class="panel-body">
|
|
7
|
+
[[user:sso.dissociate-confirm, {service}]]
|
|
8
|
+
|
|
9
|
+
<hr>
|
|
10
|
+
|
|
11
|
+
<form method="post">
|
|
12
|
+
<input type="hidden" name="_csrf" value="{config.csrf_token}" />
|
|
13
|
+
<button class="btn btn-danger">[[user:sso.dissociate]]</button>
|
|
14
|
+
</form>
|
|
15
|
+
</div>
|
|
16
|
+
</div>
|
|
17
17
|
</div>
|