因此,我正在尝试使用自己的应用程序,并尝试通过Facebook进行身份验证。我不想在UI端拥有凭据,因此希望将所有身份验证逻辑放在服务器端。
基本上我在龙卷风中的身份验证看起来像:
class AuthLoginHandler(BaseHandler, tornado.auth.FacebookGraphMixin):
@tornado.web.asynchronous
@gen.engine
def get(self):
my_url = (self.request.protocol + "://" + self.request.host +
"/auth/facebook?next=" +
tornado.escape.url_escape(self.get_argument("next", "/")))
if self.get_argument("code", False):
self.get_authenticated_user(
redirect_uri=my_url,
client_id="id",
client_secret="secret",
code=self.get_argument("code"),
callback=self._on_auth)
return
self.authorize_redirect(redirect_uri=my_url,
client_id="id",
extra_params={"scope": "public_profile,user_friends,email"})
我写了一个angular2服务,在龙卷风中调用这个api来进行身份验证。
signMeIn(){
this.http.get('/auth/facebook')
.map(res => res.text())
.subscribe(
data => this.user = data
console.log("success")
,
err => console.log("Error Authenticating User"),
() => console.log('Random Quote Complete')
);
}
但是我收到了这个错误:
XMLHttpRequest无法加载https://www.facebook.com/dialog/oauth?...response_type=code&client_id=id。 No' Access-Control-Allow-Origin'标头出现在请求的资源上。起源' http://localhost:3000'因此不允许访问。
我的基础处理程序中也有这个。
class BaseHandler(tornado.web.RequestHandler):
def get_current_user(self):
return self.get_secure_cookie("user")
def set_default_headers(self):
print "setting headers!!!"
self.set_header("Access-Control-Allow-Origin", "*")
self.set_header("Access-Control-Allow-Headers", "x-requested-with")
self.set_header('Access-Control-Allow-Methods', 'POST, GET, OPTIONS')
请咨询