新規投稿
フォローする

Googleフォームとkintoneを連携(Basic認証)

Googleフォームとkintoneを連携してみよう!を参考にし、社内開発環境では動作しましたが、社内本番環境では下記の用に、認証エラーが出ました。

[18-10-04 13:54:02:822 JST] Form submitted
[18-10-04 13:54:03:600 JST] Response: 401
[18-10-04 13:54:03:601 JST] <!DOCTYPE html>
<html>
<head>
<meta charset="utf-8">
<title>Unauthorized</title>
<meta name="viewport" content="width=device-width,initial-scale=1">
<link rel="stylesheet" href="/forest_error/css/style.css">
</head>

<body>
<div class="pagewrap">
<div class="column"> <img src="/forest_error/image/cloud.png" width="178" height="107" alt="">
<h2>アクセスするには認証が必要です。</h2>
<p>Code: 401 Unauthorized</p>
</div>
</div>
<div class="footer">
<p>Copyright(C) Cybozu</p>
</div>
</body>
</html>

そのため、私はBASIC認証の影響かと思い、下記の用にコードを変更したのですが、指定された属性の値が無効です: Header:Authorization:Basic(行 65、ファイル「kintone_manager」、プロジェクト「kintoneManager」)とエラーが出ました。

私のREST APIの理解不足かとは思いますが、解決策があれば教えて頂けないでしょうか。

 

 

//KintoneManager

Link: https://github.com/Arahabica/KintoneManager/blob/master/KintoneManager.gs 

// KintoneManager変更部分

KintoneManager.prototype._authorizationHeader = function(app) {

 

  if (this.authorization) {
    // Password authentication
    return { "X-Cybozu-Authorization": this.authorization };
  } else if (app.token) {
    // API token authentication
    return { "X-Cybozu-API-Token": app.token, "Authorization:Basic": app.basic };
  } else {
    throw new Error("Authentication Failed");
  }
};

 

// form側

// Global resource
var subdomain = 'サブドメイン';
var app = 2231;
var token = 'APIトークン';
//var basic = 'base64エンコードしたname: password';

var apps = {
YOUR_APPLICATION1: {
appid: app,
token: token,
//basic: basic
}
};


// Get email field of kintone
function getFromKintone(entry_data){
'use strict';
Logger.log('Form submitted');

//var email = entry_data[0];
var record_number = 1;

var kintone_manager = new KintoneManager.KintoneManager(subdomain, apps);
var query = 'record_no = "'+ record_number +'"'
var response = kintone_manager.search("YOUR_APPLICATION1", query);

// Status code and Records data
var code = response.getResponseCode();
Logger.log('Response: ' + code);
Logger.log(response);
var content = JSON.parse(response.getContentText());
var records = content.records;

}

0

2件のコメント

Avatar
Kazuhiro Yoshida

こんにちは。
私も出来て無いので、完成したらぜひシェアしていただけると助かります。
さて、Basic認証については下記に記載があります。
https://developer.cybozu.io/hc/ja/articles/201941754#step8

注意点も載っていますので、再度確認してはいかがでしょうか。

Kazuhiro Yoshidaにより編集されました
0
Avatar
Keisuke

Yoshidaさん

コードを見直した際、下記のように仕様に沿っていなかったことが原因でした。

説明が下手ですので、変更部分のみを抜粋します。

仕様

// ログイン名が「Administrator」、パスワードが「cybozu」の場合
Authorization:Basic QWRtaW5pc3RyYXRvcjpjeWJvenU=

今回のコード

誤: "Authorization:Basic": app.basic

  basicは"base64エンコードしたname: password"で設定

 

正: "Authorization:" app.basic

  basicは'Basic " + "base64エンコードしたname: password"

本来見えるはずの箇所が見えていませんでしたので、とても助かりました。

ありがとうございます。

 

 

1
サインインしてコメントを残してください。