小编Mat*_*cas的帖子

Google OAuth2使用AngularJS回调登录

作为参考,以下是我正在使用的Google+信息流:

https://developers.google.com/+/web/signin/server-side-flow

  1. 用户单击登录按钮.授权请求将发送到Google的OAuth服务器
  2. 为用户触发OAuth对话框
  3. 返回access_token,id_token和一次性代码
  4. 客户端将id_token和代码发送到服务器
  5. 服务器为access_token交换一次性代码
  6. Google返回access_token
  7. 服务器应确认"完全登录"到客户端

我已经有了这个大部分工作,但我希望AngularJS知道客户端在步骤7"完全登录"的时间.

理想情况下,我希望第3步由AngularJS控制器处理,但我不确定这是否可行.

登录按钮位于:

https://developers.google.com/+/web/signin/server-side-flow#step_4_add_the_sign-in_button_to_your_page

<!-- Add where you want your sign-in button to render -->
<div id="signinButton">
  <span class="g-signin"
    data-scope="https://www.googleapis.com/auth/plus.login"
    data-clientid="YOUR_CLIENT_ID"
    data-redirecturi="postmessage"
    data-accesstype="offline"
    data-cookiepolicy="single_host_origin"
    data-callback="signInCallback">
  </span>
</div>
<div id="result"></div>
Run Code Online (Sandbox Code Playgroud)

data-callback参数允许我指定一个函数,但我只能让它来处理全局函数.

我能想到的唯一解决方法是让AngularJS不断轮询服务器以获取更新,以防万一用户登录,但我想知道是否有办法在事件结构中使这项工作成为现在.

无论这是否可能,我将非常感谢任何关于我应该怎么做的建议.请让我知道,如果你有任何问题.谢谢!

javascript google-api oauth-2.0 angularjs google-oauth

10
推荐指数
1
解决办法
2万
查看次数

MongoDB:尝试使用aggregate $ unwind来获取嵌入文档

我有一个MongoDB集合[Users],每个集合都有一个嵌入文档数组[照片].我希望能够有一个页面列出最近的照片,例如 - 任何用户上传的最近10张照片.

用户

[
    {
        _id: ObjectID
        name: "Matthew"
        Photos: [
            {
                _id: ObjectID
                url: "http://www.example.com/photo1.jpg"
                created: Date("2013-02-01")
            },
            {
                _id: ObjectID
                url: "http://www.example.com/photo3.jpg"
                created: Date("2013-02-03")
            }
        ]
    },
    {
        _id: ObjectID
        name: "Bob"
        Photos: [
            {
                _id: ObjectID
                url: "http://www.example.com/photo2.jpg"
                created: Date("2013-02-02")
            },
            {
                _id: ObjectID
                url: "http://www.example.com/photo4.jpg"
                created: Date("2013-02-04")
            }
        ]
    }
]
Run Code Online (Sandbox Code Playgroud)

我解决此问题的第一个尝试是找到所有照片不为空的用户,并按创建日期对其进行排序:

User.find({images:{$ne:[]}}).sort({"images.created":-1})
Run Code Online (Sandbox Code Playgroud)

不幸的是,这不起作用,因为我需要它.它按最新图像对用户进行排序,但仍返回所有图像,并且无法限制该功能返回的图像数量.

我开始研究聚合,看起来它可能是我正在寻找的解决方案,但我很难找到如何让它工作.

理想情况下,我想要返回的结果类型如下:

results: [
    {
        _id: ObjectID (from Photo)
        name: "Bob"
        url: "http://www.example.com/photo4.jpg"
        created: Date("2013-02-04")
    }
    {
        _id: ObjectID (from Photo) …
Run Code Online (Sandbox Code Playgroud)

mongoose mongodb node.js mongohq

4
推荐指数
1
解决办法
5520
查看次数

window.postMessage的DOM异常12

我正在学习建立Chrome扩展,而我试图按照官方指南中的指令之一在这里.

我想要完成的是:

  1. background.js显示目标URL的页面操作.
  2. 页面操作在单击时执行脚本.
  3. 执行的脚本在页面上注入javascript.

到现在为止还挺好!我使用以下脚本注入页面.

var injectJS = function(url, cb) {
    var h = document.getElementsByTagName('head')[0],
        s = document.createElement('script');
    s.type = 'text/javascript';
    s.src = url;
    if (cb)
        s.onload = cb;
    h.appendChild(s);
};
injectJS(chrome.extension.getURL('script/do_something.js'));
Run Code Online (Sandbox Code Playgroud)

现在,我希望注入的脚本能够与扩展进行通信.
看起来我正在寻找的是文档中描述的内容.

https://developer.chrome.com/extensions/content_scripts.html#host-page-communication

问题是,当我尝试执行window.postMessage控制台时显示错误"DOM Exception 12".


编辑:解决了运行示例代码的第一个问题.
我得到的另一个错误,来自smae代码来自port.postMessage:

Uncaught Error: Attempting to use a disconnected port object

这是代码:

var port = chrome.runtime.connect();

// Respond to messages from the injected script to collect results
window.addEventListener('message', function(e) {
    if (e.source != window)
        return; …
Run Code Online (Sandbox Code Playgroud)

javascript google-chrome google-chrome-extension

1
推荐指数
1
解决办法
3444
查看次数