我正在网站上,用户可以在其中添加项目。他们可以将其网站的链接添加到项目。但是要验证网站是他们的网站,他们必须在网站索引的开头添加一些脚本和生成的令牌。
我想做这样的事情:
package org.vishal.hibernate;
import org.SecondHibernateProject.dto.UserDetails;
import org.hibernate.Session;
import org.hibernate.SessionFactory;
import org.hibernate.cfg.Configuration;;
public class HibernateTest2 {
public static void main(String[] args) {
UserDetails user = new UserDetails();
user.setUserId(1);
user.setUserName("First User");
SessionFactory sessionFactory=new Configuration().configure().buildSessionFactory();
Session session= sessionFactory.openSession();
session.beginTransaction();
session.save(user);
session.getTransaction().commit();
}
}
但是我不知道如何在脚本中加载该“令牌”。
我尝试过:
<script src="linktoscript" data-sitekey="token"></script>
没有用。
答案 0 :(得分:0)
这是一种解决方案,但还有更多解决方案。 我建议您不要让他们向自己的网站添加脚本。他们可能不会使用您的脚本,并拒绝让其在自己的网站上运行。
此外,如果您网站上的脚本将令牌发送到您的服务器,则您无法验证请求是否确实来自其网站。他们也可以在本地机器上运行您的脚本。
生成令牌并将其与网站网址一起存储在数据库中
示例令牌tJ0qEKJQlp2ZXb19
要求用户将此meta标签添加到他们的网站。
假设您的网站名为example.com
<meta name="example.com-token" content="tJ0qEKJQlp2ZXb19">
验证meta标签在其网站上存在。
在JS中:
fetch(urlOfTheirSite, {
headers: {
"Content-Type": "text/html",
},
}).then((resp) => {
if(!resp.ok) {
//Cannot fetch thier website
}
resp.text()
}).then((html) => {
var doc = new DOMParser().parseFromString(stringContainingHTMLSource, "text/html");
var token = doc.querySelector("meta[name=example.com-token]");
/*
* Send token and url of the website to your server for verification.
* On your server check if the url and the token match the entry in your DB
*/
})
在PHP中:
使用cURL和此RegEx
meta\s+name="?example\.com-token"?\s*content="?(\w+)"?\s*
第一个捕获组将包含令牌
告诉您的用户他们的网站已经过验证,并且可以立即删除元标记。
答案 1 :(得分:-1)
您可能正在寻找document.currentScript
。 Promise.prototype.bind = function(func) {
var initialPromise = this;
return new Promise(function(resolve) {
initialPromise.then(result => func(result).then(x => resolve(x)))
});
}
返回 var id = x => new Promise((resolve) => resolve(x));
// Law 1 -Left identity: return a >>= f ≡ f a
var value = 1
var f = x => id(x * 2);
//id(value).bind(f) ==f(value)
id(value).bind(f).then(console.log)
f(value) .then(console.log)
// Law 2 -Right Identity : m >>= return ≡ m
var m = id(1)
//m.bind(id) == m
m.bind(id).then(console.log)
m .then(console.log)
//Law 3 -Associativity: (m flatMap f) flatMap g assert_=== m flatMap { x => f(x) flatMap {g} }
var m = id(1);
var f = x => id(x * 2);
var g = x => id(x * 5);
m.bind(f).bind(g) .then(console.log);
m.bind(x=>f(x).bind(g)) .then(console.log);
的DOM。
尝试这样的事情:
document.currentScript
我托管了demo。使用“查看源代码”查看代码。