是否可以轻松地将Mozilla Persona(浏览器ID)用于原生iOS和Android应用程序?或者从网上获取信息太麻烦了web view?
我正在开发一个javaScript代码,我想确定客户端浏览器的版本和品牌,这里是我正在使用的代码片段:
var browserName ;
function BrowserCheckin ()
{
if(navigator.userAgent.indexOf("Mozilla") > 0 )
browserName = "Mozilla" ;
if (navigator.userAgent.indexOf("MSIE") > 0 )
browserName = "InternetExplorer";
if (navigator.userAgent.indexOf("Chrome") > 0)
browserName= "Google Chrome" ;
if(navigator.userAgent.indexOf("Opera") > 0 )
browserName = "Opera" ;
document.write("<h1>" + browserName + "</h1>") ;
}
Run Code Online (Sandbox Code Playgroud)
但是当我使用"Google Chrome"运行我的代码时,useAgent属性会返回一个包含以下内容的字符串:
"Mozilla/5.0(X11; Linux x86_64)AppleWebKit/534.30(KHTML,与Gecko一样)Chrome/12.0.742.112 Safari/534.30"
但我不知道"Mozilla/5.0"在那里做什么,任何人都有任何想法?
(还有一件事,我使用Linux作为我的操作系统)
提前致谢 :)
我在一个项目上使用Mozilla Persona.我想更新loggedInUser之后onlogin.但是loggedInUser传递给对象的属性navigator.id.watch().
navigator.id.watch()被调用一次(在AngularJS服务中).我应该再次调用它,传递整个对象吗?这似乎不对.我错了吗?= P
这是我的服务:
app.factory('persona', function ($rootScope, $http) {
navigator.id.watch({
loggedInUser: null,
onlogin: function onlogin(assertion) {
console.log(this);
$http.post('/signIn', { assertion: assertion })
.then(function (data, status, headers, config) {
$rootScope.$broadcast('signIn', data.data);
}, function (data, status, headers, config) {
$rootScope.$broadcast('signInError', data.data);
});
},
onlogout: function onlogout(param) {
$http.get('/signOut')
.then(function (data, status, headers, config) {
$rootScope.$broadcast('signOut', data.data);
}, function (data, status, headers, config) {
$rootScope.$broadcast('signOutError', data.data);
});
}
});
return {
signIn: function …Run Code Online (Sandbox Code Playgroud) 我目前正在开发一个webapp,并且想知道使用browserID和OpenId的权衡.
在我看来,更多的用户拥有谷歌或Facebook帐户而不是浏览器ID,因此他们可能更容易登录.另一方面,出于隐私原因,有些人不喜欢在其他一些网站上使用他们的凭据登录.
浏览器ID中的帐户创建/登录流程可以说与传统的用户名/密码登录更相似,因此某些用户可能存在较低的进入障碍.
在我的第一次迭代中,我应该抛弃一切并使用browserID吗?也可以使用openID,或者全力以赴并立即使用所有三种身份验证方法?
BrowserID的一部分优点是它只需要很少的网站基础设施,你只需嵌入一个带有一些javascript的按钮,然后设置一个回调路由来处理验证后的数据.我希望能够将BrowserID登录按钮嵌入defaultLayout模板内所有页面的顶部(然后根据登录状态有条件地显示/隐藏它),但我目前看不到这样做.Auth子网站的工作原理是将其"登录页面"嵌入defaultLayout模板中,但除此之外似乎是一个完整的黑盒子.
我真的希望能够避免滚动我自己的BrowserID登录处理程序或将用户重定向到一个完全独立的页面,如果可能的话,它只有一个BrowserID登录按钮.
有没有办法完成我想要做的事情,我只是缺少,或者我最好打赌我自己的BrowserID登录代码?
查看Yesod.Auth.BrowserId模块的源代码,看起来我可以做类似的事情:
(apLogin authBrowserId) <not sure what would go here>
Run Code Online (Sandbox Code Playgroud)
为了获得登录小部件,但劫持插件的胆量就像感觉脏了.
全点
我正在尝试使用Flask(noob!)创建一个相当基本的网站,并且我遇到了用户登录系统的问题.我决定使用Flask-Login,Flask-BrowserID(Mozilla Persona)和SQLAlchemy.我将Persona作为负责存储用户密码等的部分,一旦用户通过身份验证以跟踪他们的会话,我将使用Flask-Login,我将使用SQLAlchemy存储所有内容一个sqlite3数据库.我已经做了很多蹦蹦跳跳,我想我几乎已经完成了这些功能,但我似乎无法找回特定的错误.
更新1
基于davidism的评论,我不得不将db.Model添加到User类.不幸的是,这解决了第一个错误,但现在有一个新的问题要处理.跟踪发现如下.
问题
是什么赋予了?我显然遗漏了一些东西,但我似乎无法找到那是什么.
我一直在使用的资源
附加信息
这是我的main.py和index.html我正在使用Flask和我得到的Traceback:
MAIN.py
import sqlite3
from flask import Flask, request, session, g, redirect, url_for, abort, render_template, flash
from contextlib import closing
import time
from flask.ext.login import LoginManager, UserMixin
from flaskext.browserid import BrowserID
from flask.ext.sqlalchemy import SQLAlchemy
## SETUP
DEBUG = True
SECRET_KEY = 'development key'
USERNAME = 'admin'
PASSWORD = 'default' …Run Code Online (Sandbox Code Playgroud) 如果我想限制用于访问网站的电子邮件地址,使用Persona有什么好处?我必须以同样的方式管理我服务器上的授权电子邮件地址吗?缺少什么?
BrowserID目前使用Javascript垫片,而浏览器仍然(希望)开发支持它.对于不运行javascript的客户端,是否可以使用BrowserID?
我可以阅读600行JS shim,找出navigator.id.getVerifiedEmail要做的事情,然后在服务器上复制它,但我希望有一种更简单的方法.即便如此,我认为它不会真的奏效.
好吧,深入挖掘一下,这似乎是BrowserID意图做的外围设备,可能需要一些自定义的BrowserID验证器,但我希望有一种更简单的方法.