質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.48%
Ruby on Rails 6

Ruby on Rails 6は、オープンソースのWebアプリケーションフレームワークです。「同じことを繰り返さない」というRailsの基本理念のもと、他のフレームワークより少ないコードで簡単に開発できるよう設計されています。

Google マップ

Google Mapは、Google社がオンラインで提供している地図・ローカル検索サービスです。GIS(Geographic Information System:地理情報システム)の中の「WebGIS」に該当します。地図・航空写真・地形の表示方式があり、それぞれユーザーが縮尺を調整して表示させることができます。地域の情報サービスを検索する機能やルート検索の機能も搭載されています。

API

APIはApplication Programming Interfaceの略です。APIはプログラムにリクエストされるサービスがどのように動作するかを、デベロッパーが定めたものです。

Q&A

解決済

1回答

3121閲覧

google map apiをhttpリファラ制限有りで動作させたい

Ryo-EAST

総合スコア33

Ruby on Rails 6

Ruby on Rails 6は、オープンソースのWebアプリケーションフレームワークです。「同じことを繰り返さない」というRailsの基本理念のもと、他のフレームワークより少ないコードで簡単に開発できるよう設計されています。

Google マップ

Google Mapは、Google社がオンラインで提供している地図・ローカル検索サービスです。GIS(Geographic Information System:地理情報システム)の中の「WebGIS」に該当します。地図・航空写真・地形の表示方式があり、それぞれユーザーが縮尺を調整して表示させることができます。地域の情報サービスを検索する機能やルート検索の機能も搭載されています。

API

APIはApplication Programming Interfaceの略です。APIはプログラムにリクエストされるサービスがどのように動作するかを、デベロッパーが定めたものです。

0グッド

0クリップ

投稿2021/05/04 16:25

前提

google map apiを使い駐車場を貸し借りするアプリを作成しています。
検索ワード周辺の駐車場を検索する機能を下記のように動作するように実装しました。

  1. 検索ワードをフォームからコントローラに送信
  2. コントローラでデータベースから検索ワードに近い駐車場(住所)検索
  3. 検索に該当した駐車場をビューで表示

apiの設定でhttpリファラー制限をかけると
上記3で表示されるべき駐車場の情報が取得できません

制限を無しにすると、駐車場の情報を表示し
問題なく動作します。

実現したいこと

httpリファラー制限をかけた状態で正常に動作させたい

発生している問題・エラーメッセージ

同じメッセージが2回連続で表示されます

Google API error: request denied (API keys with referer restrictions cannot be used with this API.). Google API error: request denied (API keys with referer restrictions cannot be used with this API.).

該当のソースコード

入力フォームをapplication.html.hamlに記述→searchアクションにsearch_wordを送る

haml

1= form_with url: search_parks_path, method: :get, local: true do |f| 2 = f.search_field :search_word 3 = f.submit "検索", class: "btn btn-light", name: "search-commit", id: "search-btn"

parkコントローラのsearchアクション記述

ruby

1 def search 2 @search = params[:search_word] 3 @search_geo = Geocoder.coordinates(@search) 4 if user_signed_in? 5 @parks = Park.where.not(user_id: current_user.id).where(rending_stop: false).where('end_time > ?', Time.now).near(@search, 6 0.4) 7 gon.parks = @parks 8 else 9 @parks = Park.where(rending_stop: false).where('end_time > ?', Time.now).near(@search, 0.4) 10 gon.parks = @parks 11 end 12 end

試したこと

・httpリファラーを検索ワードを含めたアドレスに変更して動作確認をした
→それでも正常に動作しない
変更前:https//:アドレス.com/*
変更後:https//:アドレス.com/?search_word=検索ワード&search-commit=検索

補足情報(FW/ツールのバージョンなど)

ruby 2.6.5
Rails 6.0.3.5

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

Ryo-EAST

2021/05/05 15:54

回答ありがとうございます。 現在herokuでデプロイしています ipが変動しているのをQuotaguardを使って固定を挑戦しましたが できなかったのでawsにデプロイしてみようと思います。 確認したいのですが ・クエリ(アドレスの後に?で検索ワード)が付くとhttpリファラーは使えないのですか?  →「ipだとapiを利用するサーバーで制限するので解決する」という解釈は合っているでしょうか?
guest

回答1

0

自己解決

Maps JavaScript APIとGeocoding APIの2つのAPIを利用していた事を勘違いして
(同じAPIの機能が複数あると勘違いしていた)
それぞれのAPIの動作するときに送信するか受信する様に動作が違う事すら認識していなかった
→かける制限が変わる

以上を踏まえて以下の手順で解決した。

手順

【AWS】

  1. EC2へのデプロイ
  2. ElasticIPでIP固定
  3. ドメイン取得
  4. SSL認証

【google cloud platform】

  1. APIキーを2つに分ける
  2. 「アプリケーションの制限」をそれぞれにかける
  3. 「APIの制限」を使用するAPI選択
  4. APIキーを環境変数に設定する

APIキー

APIキー1

  • アプリケーションの制限(IP):ElasticIP
  • APIの制限:Geocoding API
  • 環境変数:config/initializers/geocoder.rb.rb

ruby

1api_key: ENV['GOOGLE_MAP_API_KEY']

APIキー2

  • アプリケーションの制限(http):https//:アドレス.com/*
  • APIの制限:Maps JavaScript API
  • 環境変数:ビューファイル(script)

haml

1%script{:async => "", :defer => "defer", :src => "https://maps.googleapis.com/maps/api/js?key=#{ENV['GOOGLE_MAP_API_KEY_HTTP']}&libraries=places&callback=initMap"}

投稿2021/05/11 15:51

Ryo-EAST

総合スコア33

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.48%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問