LoginSignup
0
0

More than 1 year has passed since last update.

railsチュートリアル第八章 基本的なログイン機構

Posted at

今回はユーザーがログインやログアウトを行う。
本章では、ログインの基本的な仕組みを実装
ブラウザがログインしている状態を保持し、ユーザーによってブラウザが閉じられたら状態を破棄するといった仕組み
ログイン済みのユーザー(current user)だけがアクセスできるページや、扱える機能などを制御していきます。
このような制限や制御の仕組みを認可モデル(Authorization Model)という。

セッション

ユーザーログインの必要なWebアプリケーションでは、セッション(Session)と呼ばれる半永続的な接続をコンピュータ間(ユーザーのパソコンのWebブラウザとRailsサーバーなど)に別途設定します。

Railsでセッションを実装する方法として最も一般的なのは、cookiesを使う方法
....。

新しいブランチを作る

$ git checkout -b basic-login

Sessionsコントローラ

ここではnewアクションを作る

ubuntu:~/environment/sample_app (basic-login) $ rails generate controller Sessions new
Running via Spring preloader in process 9802
      create  app/controllers/sessions_controller.rb
       route  get 'sessions/new'
      invoke  erb
      create    app/views/sessions
      create    app/views/sessions/new.html.erb
      invoke  test_unit
      create    test/controllers/sessions_controller_test.rb
      invoke  helper
      create    app/helpers/sessions_helper.rb
      invoke    test_unit
      invoke  assets
      invoke    scss
      create      app/assets/stylesheets/sessions.scss

ファイルを作成

リソースを追加して標準的なRESTfulアクションをgetできるようにする

config/routes.rb

Rails.application.routes.draw do
  get 'sessions/new'
  root 'static_pages#home'
  # 何の意味がわからん
  # ホーム画面がhomeページなるらしい
  get  '/help',    to: 'static_pages#help'
  # static_pagesコントローラからhomeアクションに紐付けされる
  # getでアクセルすることでページを取得することができる
  get  '/about',   to: 'static_pages#about'
  # 何を書いているかはわからない
  get  '/contact', to: 'static_pages#contact'
  # aboutアクションにGETリクエストを送る
  get  '/signup',  to: 'users#new'
  # urlに/signupと書くとuserコントローラのnewアクションを起こす
  get    '/login',   to: 'sessions#new'
  # データを取得
  post   '/login',   to: 'sessions#create'
  # データを投稿
  delete '/logout',  to: 'sessions#destroy'
  # 削除
  resources :users
  # /users/1の有効にするため
end

リクエスト url   名前付きルート アクション   用途
GET    /login   login_path   new      新しいセッションのページ(ログイン)
POST   /login   login_path   create     新しいセッションの作成(ログイン)
DELETE  /logout  logout_path   destroy     セッションの削除(ログアウト)

rails routes

 login GET    /login(.:format)  sessions#new                                                                       
       POST   /login(.:format)    sessions#create                                                                     
logout DELETE /logout(.:format)   sessions#destroy                                                              

演習

1.GET login_pathとPOST login_pathとの違いを説明できますか? 少し考えてみましょう。

GET login_pathはloginページを表示させる
POST login_pathはloginのためにデータを送信する

2.ターミナルのパイプ機能を使ってrails routesの実行結果とgrepコマンドを繋ぐことで、Usersリソースに関するルーティングだけを表示させることができます。同様にして、Sessionsリソースに関する結果だけを表示させてみましょう。現在、いくつのSessionsリソースがあるでしょうか? ヒント: パイプやgrepの使い方が分からない場合は 『コマンドライン編』の 「grepで検索する」を参考にしてみてください。

ubuntu:~/environment/sample_app (basic-login) $ rails routes | grep sessions#                         
sessions_new GET /sessions/new(.:format)   sessions#new                                                               
login GET    /login(.:format) sessions#new                                                                        
      POST   /login(.:format) sessions#create                                                                    
loguniELETE /logout(.:format) sessions#destroy                                                                      

何がしたいのかわからない。

0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0