我一直在遵循“ google_places gem”教程,在将Google Places gem与我的代码集成以获取针对我的应用程序的Google评论时遇到了麻烦。
我已经获得许可,并且API密钥也已启用,但是,访问请求时遇到问题。
doctors_controller.rb:
class Manage::DoctorsController < Manage::BaseController
# layout "design"
require 'google-places'
def show
@doctor = Doctor.find(params[:id])
authorize @doctor, :manage?
@doctor = @location = @doctor.decorate
#tring out google reviews
api_key = "my_key"
@client = GooglePlaces::Client.new(api_key)
@client = @client.spots(-33.8670522, 151.1957362, :types => 'restaurant')
end
我得到的错误是:
GooglePlaces::RequestDeniedError in Manage::DoctorsController#show
This API project is not authorized to use this API.
如何在views.html
中称呼他们?
看来您的API密钥无效,因为您没有获得“对此API的许可”。也许您尚未在Google帐户中启用Google Places API。
请确保您的api_key
仍然有效。 “ Get an API Key”解释了如何。
如果可行,您应该将敏感的api_key
隐藏在Rails的credentials(> = Rails 5.2)中,然后在控制器中使用它。
@client = GooglePlaces::Client.new(Rails.application.credentials[:api_key])
您必须设置环境变量。将API KEY视为房屋的钥匙。您不想让任何您不信任的人都可以使用这些密钥。只有您或居住在您房屋中的人(将其视为团队)才能拥有钥匙。
现在,您存储Google提供的API密钥的方式是在环境变量中。环境变量只是存储该API密钥并能够从应用程序中获取它的一种安全方法。您可以阅读有关Ruby如何使用环境变量here的更多信息。
有一个dotenv宝石,可让您创建一个可以存储API密钥的.env
文件。
。env:
GOOGLE_API_KEY=<<YOUR API KEY HERE>>
现在您可以将此API密钥传递给脚本,这样,当客户端向Google API发出请求时,您就会得到响应。
@client = GooglePlaces::Client.new(ENV['GOOGLE_API_KEY'])
而且,您的show
方法太忙了,这是一种反模式,但是我认为,当您对Rails和Ruby有了更好的了解之后,您可以稍后再进一步学习。