Aws :: S3 :: Ошибки :: AccessDenied в Devise - PullRequest
0 голосов
/ 16 января 2019

Я пытаюсь сохранить изображения с помощью AmazonS3 для моего блога с помощью скрепки. В блоге разработан джем, разработанный для входа в систему / регистрации [Пользователь], и я хочу добавить изображение для каждого пользователя, сохранив его на Amazon S3. Ранее я хранил их в базе данных, и она отлично работала.

Я уже много искал, но не смог найти решение для этого.

        //Development.rb
    config.paperclip_defaults = {
      storage: :s3,
        s3_credentials: {
          bucket: ENV.fetch('S3_BUCKET_NAME'),
          access_key_id: ENV.fetch('AWS_ACCESS_KEY_ID'),
          secret_access_key: ENV.fetch('AWS_SECRET_ACCESS_KEY'),
          s3_region: ENV.fetch('AWS_REGION'),
        }
      }

    //AddAttachment Migration
    class AddAttachmentImageToUsers < ActiveRecord::Migration[5.2]
      def self.up
        change_table :users do |t|
          t.attachment :image
        end
      end

      def self.down
        remove_attachment :users, :image
      end
    end

    //User.rb
    class User < ActiveRecord::Base
      # Include default devise modules. Others available are:
      # :confirmable, :lockable, :timeoutable, :trackable and :omniauthable
      devise :database_authenticatable, :registerable,
             :recoverable, :rememberable, :validatable

      has_many :comments, dependent: :destroy
      has_many :likes, dependent: :destroy
      has_many :articles

      has_attached_file :image, :styles => { :medium => "300x300>", :thumb => "100x100>"}

      validates_attachment_content_type :image, content_type: /\Aimage\/.*\z/
    end

    //Application.yml
    AWS_ACCESS_KEY_ID: -----
    AWS_SECRET_ACCESS_KEY: ------
    S3_BUCKET_NAME: -------------
    AWS_REGION: ap-south-1

    //Application.html.erb
   <!DOCTYPE html>
<html>
  <head>
    <title> TheBlog</title>
    <%= csrf_meta_tags %>
    <%= csp_meta_tag %>

    <%= stylesheet_link_tag    'application', media: 'all', 'data-turbolinks-track': 'reload' %>
    <%= javascript_include_tag 'application', 'data-turbolinks-track': 'reload' %>

    <meta charset="utf-8">
    <meta name="viewport" content="width=device-width, initial-scale=1">
    <link rel="stylesheet" href="https://maxcdn.bootstrapcdn.com/bootstrap/3.3.7/css/bootstrap.min.css">
    <script src="https://ajax.googleapis.com/ajax/libs/jquery/3.3.1/jquery.min.js"></script>
    <script src="https://maxcdn.bootstrapcdn.com/bootstrap/3.3.7/js/bootstrap.min.js"></script>
  </head>

  <body>

    <nav class="navbar navbar-inverse">
  <div class="container-fluid">
    <div class="navbar-header">
      <a class="navbar-brand" href="#" id="logo">The Blog</a>
    </div>
    <ul class="nav navbar-nav">
      <li class="active">
        <%= link_to 'Home', root_path %></li>
        <li><%= link_to 'About', about_path %></li>
    </ul>

    <ul class="nav navbar-nav navbar-right">
      <% if user_signed_in? %>
        <li>  <%= image_tag current_user.image.url, size:"40x40" %></li>
        <li><%= link_to current_user.email, edit_user_registration_path %></li>
        <li><%= link_to "Logout", destroy_user_session_path, method: :delete %></li>
        <% else %>
      <li><%= link_to "Sign Up", new_user_registration_path %></li>
      <li><%= link_to "Login", new_user_session_path %></li>
      <% end %>
    </ul>
  </div>
</nav>

    <%= yield %>
  </body>
</html>

1 Ответ

0 голосов
/ 16 января 2019

Похоже на ту же проблему, что и: https://railsblogs.rohityadav.in/2018/01/awss3errorsaccessdenied-access-denied.html

Если вы получаете эту ошибку при попытке загрузки на S3, вам необходимо назначить этому пользователю IAM политику «AmazonS3FullAccess».

Или это может быть проблема с настройкой heroku:

AWS :: S3 :: Ошибки :: AccessDenied. Невозможно сохранить в S3 с Ruby on Rails

Вам нужно установить свои учетные данные AWS как переменные конфигурации в heroku (в основном, переменные среды). Вы можете проверить, установлены ли они с помощью настройки heroku; если они не установлены, вы можете добавить их с помощью конфигурации heroku: set S3_BUCKET_NAME = что-то AWS_ACCESS_KEY_ID = что угодно AWS_SECRET_ACCESS_KEY = что-то_секретить. Больше информации с настройкой heroku --help

...