当前位置: 首页 > news >正文

聊城网站建设基本流程网站开发高级工程师专业

聊城网站建设基本流程,网站开发高级工程师专业,海口网站自助建站,网站空间是虚拟主机吗国外persona用户画像到目前为止#xff0c;只有Twitter和Facebook身份验证#xff0c;我决定将Mozilla Persona添加到我最新项目#xff08; 计算机 #xff0c;计算机生成的音乐#xff09;的列表中。 为什么#xff1f; 我喜欢尝试新事物 存储密码是一个艰巨的过程只有Twitter和Facebook身份验证我决定将Mozilla Persona添加到我最新项目 计算机 计算机生成的音乐的列表中。 为什么 我喜欢尝试新事物 存储密码是一个艰巨的过程尽管我知道该怎么做甚至大部分代码都写在另一个项目中但我认为我不应该为每个需要密码认证的站点做出贡献 Mozilla是一个开放的基金会迄今为止已经产生了许多出色的产品。 Persona实现了BrowserID协议将来可能会在Firefox以外的其他浏览器中本地支持目前您需要包含.js文件 第三方身份验证已经尝试了很多次这是一件很了不起的事情但是由于一些原因它并不是主流。 有所不同《女神异闻录》可能会成功地变得更受欢迎。 Mozilla的解释很有意义 因此我从“快速设置”指南开始。 看起来真的很容易。 比OpenID或OAuth身份验证容易得多–您无需在任何地方注册任何内容不需要第三方库来处理服务器上的验证并且您无需学习复杂的身份验证流程因为该流程很简单 用户单击登录按钮 出现一个弹出窗口 如果未通过Persona认证则提示用户注册 如果通过Persona进行了身份验证则提示用户批准对该站点的身份验证 弹出窗口关闭页面重定向/刷新-用户现在已登录 当然它不是那么简单但是只有几件事需要注意本教程中没有提到。 因此让我们一步一步地遵循官方教程并在每一点上进行扩展使用的服务器端语言是Java但它很简单您可以使用任何语言来完成 1.包括.js文件-简单。 建议从Mozilla服务器获取js文件而不是将其存储在本地因为它可能会更改例如为了修复错误。 如果将js文件合并到一个文件中为了加快页面加载速度可能会比较棘手但是您的机制可能允许加载远程js文件。 2.登录和退出按钮。 这看起来也很容易。 最好有条件地添加注销处理程序–仅当用户已使用Persona登录时而不是您的站点支持的其他身份验证方法 3.侦听身份验证事件。 建议将监听事件放在所有页面上例如包含在标题模板中。 但是这里有一个问题。 如果您的用户已经在Persona中进行了身份验证但是他的会话在您的站点上已过期则脚本将自动登录该用户。 这将需要在页面加载后的几秒钟内重新加载页面。 这并不一定是您或用户想要的-例如在我的情况下这可能意味着他们刚刚播放的曲目由于页面刷新而中断。 当然可以使用AJAX来完成但是当UI中的某些内容没有明显原因发生更改时肯定会造成混乱。 下面我将显示针对此问题的修复程序。 此外可能并非到处都需要注销监听器-据我了解如果您已注销Persona它将自动注销用户。 这可能不是您想要的-例如用户可能希望保留一些打开的选项卡其中包含一些注销后无法访问的文档。 4.验证服务器上的断言。 在这里您可能需要第3方库来调用验证端点并解析json结果但是这些是您可能已经包含的非常标准的库。 现在如何解决自动身份验证的问题 声明一个新变量userRequestedAuthentication 该变量保存身份验证是由用户显式发起还是由用户自动发起。 在登录按钮中单击处理程序将该变量设置为true 。 这是js代码的样子顺便说一句我认为可以将代码放在document.ready中而不是直接放在script标记中。假设您以后需要在处理程序方法中使用一些DOM资源页面已完全加载。另一方面这可能会减慢该过程的速度。 请注意您可以在所有页面上包括一个空的onlogin处理程序并且仅在身份验证页面上具有完整的处理程序。 但是鉴于登录按钮位于主页上或带有javascript模态窗口显示因此可以在任何地方/在多个页面上都可以使用。 script typetext/javascriptvar loggedInUser ${context.user ! null ? context.user.email : null};var userRequestedAuthentication false;navigator.id.watch({loggedInUser : loggedInUser,onlogin : function(assertion) {$.ajax({type : POST,url : ${root}/persona/auth,data : {assertion : assertion, userRequestedAuthentication : userRequestedAuthentication},success : function(data) {if (data ! ) {window.location.href ${root} data;}},error : function(xhr, status, err) {alert(Authentication failure: err);}});},onlogout : function() {window.locaiton.open(${root}/logout);}}); /script 如您所见参数被传递到服务器端代码。 那里发生了什么 RequestMapping(/persona/auth) ResponseBody public String authenticateWithPersona(RequestParam String assertion,RequestParam boolean userRequestedAuthentication, HttpServletRequest request, Model model)throws IOException {if (context.getUser() ! null) {return ;}MultiValueMapString, String params new LinkedMultiValueMap();params.add(assertion, assertion);params.add(audience, request.getScheme() :// request.getServerName() : (request.getServerPort() 80 ? : request.getServerPort()));PersonaVerificationResponse response restTemplate.postForObject(https://verifier.login.persona.org/verify, params, PersonaVerificationResponse.class);if (response.getStatus().equals(okay)) {User user userService.getUserByEmail(response.getEmail());if (user null userRequestedAuthentication) {return /signup?email response.getEmail();} else if (user ! null){if (userRequestedAuthentication || user.isLoginAutomatically()) {context.setUser(user);return /;} else {return ;}} else {return ; //in case this is not a user-requested operation, do nothing}} else {logger.warn(Persona authentication failed due to reason: response.getReason());throw new IllegalStateException(Authentication failed);} } 逻辑看起来比您希望的更复杂但是让我解释一下 正如您在javascript代码中看到的那样空字符串表示“不执行任何操作”。 如果返回任何其他内容则javascript将打开该页面。 如果不使用spring-mvc则无需将其从方法中返回ResponseBody字符串而是将其写入响应输出流或用php术语–将其回显。 首先您检查系统中是否已经有经过身份验证的用户。 如果有则什么也不做。 我不确定是否存在Persona在已通过身份验证的用户上调用“ onlogin”的情况但是如果您使用其他身份验证选项Persona将不会知道您的用户已使用Twitter登录。 然后您调用验证URL并将结果解析为JSON。 我已经使用过RestTemplate 但是任何东西都可以使用RestTemplate URLConnection。 对于JSON解析spring在后台使用了Jackson。 您只需要编写一个值对象即可保存Persona可能返回的所有属性。 到目前为止我只包括状态电子邮件和原因杰克逊详细信息ignoreUnknown truespring-mvc详细信息您需要将FormHttpMessageConverter设置为RestTemplate 。 重要的是“受众”参数必须是用户当前所在的域。 无论是否使用www它都会有所不同因此请对其进行重构而不是对其进行硬编码或从属性中加载它。 即使您从www重定向到no-www反之亦然您仍应为测试而动态获取该URL –测试环境的URL与生产环境的URL不同。 如果Persona身份验证为“可以”则您尝试在数据库中查找具有该电子邮件的用户。 如果没有这样的用户并且身份验证操作已手动触发则将用户发送到注册页面并提供电子邮件作为参数您也可以在http会话中进行设置以使用户无法对其进行修改。 然后注册页面会询问其他详细信息-名称用户名出生日期或您认为合适的任何信息但请尽量减少-最好仅是全名。 如果仅需要电子邮件地址而无需其他任何内容则可以跳过注册页面并强制注册用户。 注册完成后您登录用户。 请注意如果您已将电子邮件存储在会话中即用户无法从注册页面修改它则可以跳过确认电子邮件-Persona已确认该电子邮件 如果您的数据库中有该电子邮件的用户请检查该用户是否已请求该操作或者是否已通过注册页面中的复选框指示他要自动登录。考虑–应该询问用户还是应该始终将其设置为true或false 我已经添加了复选框。 如果应该进行登录则在会话中设置用户并重定向到home或上一页或“用户home”的任何页面“ context”是会话范围的bean。您可以将其替换为session.setAttribute(user, user) 。 如果身份验证尝试是自动的但用户不希望这样做则不执行任何操作。 最后一个“ else”是针对用户在您的站点上没有帐户并且触发了自动身份验证的情况–在这种情况下不执行任何操作否则最终将无休止地重定向到注册页面 如果身份验证失败请务必记录原因-然后您可以通过查看日志来检查一切是否正常 使用电子邮件作为唯一标识符 使数据库列唯一 的一个很酷的副作用是如果稍后将Persona添加到您的站点即使用户以其他方式注册例如facebook或常规注册用户也可以使用它登录。 因此他们可以将密码设置为长而难以记住的密码并仅使用Persona继续登录。 我从实现中省略的细节很简单注册页面只是收集字段并将其提交给/ completeRegistration处理程序该处理程序将新用户存储在数据库中。 / logout网址仅清除会话如果存储了cookie则清除cookie。 顺便说一句如果启用了自动登录并且Persona是您唯一的身份验证方法则可能不需要存储cookie来保持会话过期后仍保持用户登录状态。 总体而言即使我提出了要点实现也仍然很简单。 女神异闻录看起来很棒我希望很快能在更多站点上看到它。 参考 Bozho的技术博客博客上的JCG合作伙伴 Bozhidar Bozhanov的 Mozilla Persona身份验证用户指南 。 翻译自: https://www.javacodegeeks.com/2012/12/a-guide-to-authenticating-users-with-mozilla-persona.html国外persona用户画像
http://www.zqtcl.cn/news/286301/

相关文章:

  • 网站被黑咋样的柳州正规网站制作公司哪家好
  • 莱芜网站开发代理四川网络推广服务
  • 应该知道的网站网站全网建设莱芜
  • 北京网站页设计制作广州专业网站改版
  • 重庆网站建设建站收费免费外链网盘
  • 做加盟代理的网站比较好的网页网站设计
  • 兴义网站开发企业标准备案平台官网
  • 蓝彩网络科技_齐齐哈尔微信营销_齐齐哈尔网站建设会员卡管理系统哪里买
  • 织梦门户网站做大后建个人免费网站用哪个
  • 深圳市建设管理中心西安官网seo
  • 网站开发工作方案自己做的网站怎么维护
  • 潍坊建设部门管理网站做网站如何接单
  • 定制高端网站建设设计建立的近义词
  • 企业网站建设进度邢台163官网
  • 17做网店网站池尾替代wordpress 搜索
  • 网站建设资料 优帮云商品分类标准
  • 鄂尔多斯 网站建设俐侎族网站建设背景
  • 佛山专业网站建设公司上海公司官网
  • 那里做网站好网站模板 登陆
  • 网站的服务器打不开wordpress 修改默认路径
  • 外贸网站做几种产品合肥网络公司哪个最好
  • 长乐区建设局网站一般通过什么渠道了解防灾减灾知识
  • 泰安商城网站开发设计什么网站备案比较快
  • 织梦网站修改首页图片网站名称去哪里注册
  • 电脑版 做网站尺寸怎么查找网站后台
  • 南京网站建设公司国际新闻头条最新消息
  • 类似于wordpress的网站吗做网站前端难吗
  • 做外贸网站维护费是多少小程序源码提取
  • 设计网站作品欣赏有那些网站注册商标官网入口
  • 装修网站怎么做的外贸谷歌推广怎么样