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

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

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

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

Devise

Deviseとは、Ruby-on-Railsの認証機能を追加するプラグインです。

Q&A

解決済

2回答

897閲覧

自分のみが投稿できるアプリをrailsで作りたいです!

mtrhsgw

総合スコア19

Ruby on Rails 5

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

Devise

Deviseとは、Ruby-on-Railsの認証機能を追加するプラグインです。

0グッド

0クリップ

投稿2022/04/18 23:31

編集2022/04/18 23:35

作成の手順がおわかりになる方がいれば、お教えくださいm(_ _)m

■現状

・scafold を使用して、ひと通りアプリが完成している
・ログイン機能は設けていない
・新規投稿、編集、削除は誰でもできる(ボタンも押せる)

■やりたいこと

・自分のみが新規投稿、編集、削除できるようにしたい
・他人は、私が投稿した内容の閲覧のみ可能(なので他人にはログイン機能は不要)

■実装方法について

・上記を実現するためには、deviseのようなログイン機能の導入が必要でしょうか
・ほかに方法ありますでしょうか
・deviseを導入が必要な場合、私のみがログインできるようにして、ログイン者のみが新規投稿、編集、削除できるようにするのでしょうか
・実装手順はどのようなものでしょうか

※もしくは詳しく解説しているサイトなどありますでしょうか?(探しても見つけられませんでした。。涙)

ご教示いただけますと幸いです^ ^
よろしくお願いいたします!!

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

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

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

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

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

Zuishin

2022/04/18 23:33 編集

普通にログイン機能を作ればいいだけのように思います。 変なフィルターをかけて探しているから情報が見つからないのでは?
nya-3

2022/04/18 23:56

全然詳しくないのですが、管理者だけが見れる画面など作れないのでしょうか? 管理者権限を持つ人だけが投稿できるなどの仕組みが作れそうですが、どうなんでしょう。
Zuishin

2022/04/19 01:06

アクセスした人が管理者かどうかをどうやってサイトに伝えますか? IP をパスワード代わりに使うなら可能ですが、その分セキュリティは低下します。 仮に管理者の IP が他の人に割り当てられてしまった場合、権限を奪われることになります。 ログインボタンのある画面を他のユーザーに見せたくないだけなら、何か特別なアドレスを割り当て、ロボットを排除して隠すことで目的が達せられるのではないかと思います。
mtrhsgw

2022/04/19 05:26

nya-3さん、otnさん、Zuishinさん、ご連絡いただきありがとうございます!! Zuishin様仰せの通り、ボタンを他の人から見えないようにすれば、私の意図していたことが解決するかと思いました! (説明不足ですいませんでした。。) その場合、条件分岐で表示/非表示にすればよいのでしょうか?
Zuishin

2022/04/19 05:30

分岐じゃなく、ロボットをはじいて、ログイン用の URL を知る人以外から隠すという意味です。 アクセスしてきた人が管理者かどうか区別できないのに分岐もないでしょう。
mtrhsgw

2022/04/19 05:55

初心者なのでお手柔らかにお願いいたしますm(_ _)m 「ロボットをはじいて」 ↑これについて、調べてみます。ありがとうございました!
guest

回答2

0

ベストアンサー

個人的にアプリケーションとして完結させる方法としては以下2つの方法ですかね。
どちらもログイン機能を作成することを前提とします。

  1. 管理画面の実装
  2. ログインしているユーザーにのみ投稿/編集/削除ボタンを表示

1に関しては、TOP画面(投稿が見れる画面)とは別に、例えば/loginなどのログインページを作成して、ID/パスワードを入力して認証が通れば管理画面(/admin など)にリダイレクトする方法です。

2に関しては、少し技術と検証が必要かもしれませんが、(自分でもやったことないのでアイディアですが)1と同様にログイン画面を別途作成し、ログインしたらTOP画面にリダイレクトし、TOP画面の生成処理をする際、ログインに成功済みユーザーかを判別して、ログインしていれば投稿/編集/削除ボタンを生成する、ログインしていなければ生成しないという方法です。
念のため投稿/編集/削除をした際にrails側でログイン済みユーザーか確認する処理を入れるとよいと思います。

管理画面へアクセスできる権限を持っているかやログイン済みユーザーかはブラウザが持つクッキーに(暗号化した)ユーザーIDを保存し、その中身を検証して判断します。
ログイン機能はdeviseを使用しなくても実装は可能です。
一番基本となるのは以下のサイトです。
第1章 ゼロからデプロイまで - Railsチュートリアル
この7章、8章あたりにログイン機能の実装方法が書いてあるので、まずはこれをベースにログイン機能を実装するとよいと思います。

いきなり7,8章を見てもよいですが、前後関係があるのでわかりにくければ最初から一通り見てみるのもいいと思います。(習熟度が分かりませんが、良い復習になるかもしれません)
(というか、scafoldで作成するよりも全部手動で作成してみて仕組みを理解するほうが良いかと思います)

deviseを使用しないと多少不便なところはありますが、(セッションの期限を切れないなど)一応解消方法はある(DBによるセッション管理機能の追加等)ので、使わなくてもいいと個人的には思います。
railsに限らずdeviseの様なフレームワーク系はそれ自身の使い方をある程度理解する必要が(本当は)あります。
また、deviseの元となっているのはrailsで、その元はrubyなので、まずはフレームワークを使用せずに開発したほうがスキルとして身につくと思います。
(スキルがいらなければフレームワーク使ってよいですが)

個人的(インフラ系の人)には、インフラによる認証や制限(ip制限やbasic認証)はどうしても手っ取り早く制限を済ませたい時(既存アプリはあるけどとりあえず一部公開したい)やセキュリティの強化(ip制限+アプリログイン)でしかやらない印象なので、ちゃんとアプリを作りたいのであればrails側でログイン機能を実装したほうが良いと思います。

投稿2022/04/19 06:18

YuuT

総合スコア673

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

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

mtrhsgw

2022/04/19 09:49

長文のご回答誠にありがとうございます!! ご教示いただきました内容を踏まえ、作成してみます! ありがとうございました!!
guest

0

いろいろ考えられますが、
1.自宅からだけしか使わず、自宅回線が固定IP契約
⇒ そのIPアドレスからだけアクセスを許可する
固定IP契約で無い場合、プロバイダーによっては頻繁にIPアドレスが変わったり、数年間変わらなかったり、いろいろですが、数年間変わっていないようなケースなら使えるかも。我が家は直近5年間は不変です。

2.あらかじめ特別なCookieに値を仕込んでおく
⇒ ブラウザのCookie値保存ファイルをいじくるのは難しいでしょうから、そのCookieを設定する為のページを一時的に作って、無期限のCookieをブラウザに保存させ、そのCookie値で認証する。設定ページは用が済んだので削除してしまう。

3.HTTPサーバーの機能でBasic認証とか、Digest認証とかで軽く済ませる。

案2と、案3のBasic認証は、パスワードを平文で送っているわけなので、その程度の安全性で良ければですが。
まあ、案2はログインのあるシステムで「ログイン状態を無期限で保持」と変わらないか。httpsサイトなら良いかも。
とはいえ、案1に該当しない場合は、素直に、ログインの仕組みを作るのが良いと思います。

投稿2022/04/19 00:02

otn

総合スコア84557

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

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

mtrhsgw

2022/04/19 09:50

ご丁寧にご回答ありがとうございます!! 大変勉強になりましたm(_ _)m
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.48%

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

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

質問する

関連した質問