通过对话框从Office Addin身份验证Office 365

时间:2017-04-12 16:57:30

标签: office-js office-addins

我已经为Word创建了Office Addin。当我尝试向Office 365进行身份验证时,我使用的是Office.context.ui.displayDialogAsync'打开一个对话框。我的回调是成功的,对话框打开。对话框打开后,api调用' _dlg.addEventHandler(Office.EventType.DialogEventReceived,processMessage);'返回错误代码' 12003'这意味着需要https,但我的页面是通过https提供的。

如果我的网页是通过https提供的,我不知道为什么会收到此错误?

$scope.startLogin = function () {
                showLoginPopup("/Auth.html").then(function successCallback(response) {

                    // authentication has succeeded but to get the authenication context for the
                    // user which is stored in localStorage we need to reload the page.
                    window.location.reload();
                }, function errorCallback(response) {
                    console.log(response);
                });
            }; 



var _dlg;
var _dlgDefer;  

var showLoginPopup = function (url) {
                _dlgDefer = $q.defer();

                Office.context.ui.displayDialogAsync('https://' + location.hostname + url, { height: 40, width: 40}, function (result) {
                    console.log("dialog has initialized. wiring up events");
                    _dlg = result.value;
                    console.log(result.value)
                    _dlg.addEventHandler(Office.EventType.DialogEventReceived, processMessage);
                });

                return _dlgDefer.promise;
            } 

function processMessage(arg) {
                console.log(arg.error)
                var msg = arg.message;
                console.log("Message received in processMessage");
                if (msg && msg === "success") {
                    //we now have a valid auth token in the localStorage
                    _dlg.close();
                    _dlgDefer.resolve();
                } else {
                    //something went wrong with authentication
                    _dlg.close();
                    console.log("Authentication failed: " + arg.message);
                    _dlgDefer.reject();
                }
            }

1 个答案:

答案 0 :(得分:0)

您的代码中的一些内容让我认为您可能正在使用旧示例。 Dialog API中有一些变化。如果您还没有,请阅读Use the Dialog API in your Office Add-ins

12003并不意味着作为displayDialogAsync()参数传递的原始页面是非HTTPS。相反,这意味着在最初打开HTTPS URL后,对话框已重定向到非HTTPS地址。您需要查看Auth.html页面的脚本,并查看对话框被重定向到的URL。

我注意到的另一件事: DialogEventReceived的处理程序测试"成功"作为arg.message。 DialogEventReceived现在只用于错误处理。通常,应通过调用messageParent()将成功传达给主页。您可以在主机页面上使用事件处理程序处理这些消息对话框消息已接收。