ジャンル別に投稿・チャットできるようなアプリ作ってみた〜ログインページ編〜

これから個人アプリの機能一つ一つをどのように作成したか、記事にしていきたいと思います。
おかしいところあってもご容赦ください。
又はコメントにご指摘くださるとありがたいです。

### :sunny: ログインページ
![スクリーンショット 2020-08-01 23.01.33.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/573113/2b32a68f-ec75-58f9-3c87-ce33e3584c9c.png)
![スクリーンショット 2020-08-01 23.05.10.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/573113/bd268222-0e80-1df4-bc0b-ae3179f8bb9a.png)

**ログインには、gem 'devise'を使用しました**

```ruby:Gemfile
# ログインやユーザ登録機能に便利
gem 'devise'
```
ターミナルでbundle installe

```console
% bundle install
```

まあ、機能としては大体deviseのものをそのまま使っています。
ただ、deviseの登録ってメールアドレスとパスワードなんですよね。
ということで、登録する際は、名前も登録してもらうようにしました。

#### :star: 登録画面
```ruby:app/views/devise/registrations/new.html.haml
.new-header
  = render "devise/shared/error_messages", resource: resource
.middle
  .middle__login
    .middle__login__top
      %p.middle__login__top__text
        登録しちゃう？(￣▽￣)
    .middle__login__bottom
      .middle__login__bottom__form
        = form_with(model: @user, url: user_registration_path,local: true,method: :post) do |f|
          .middle__login__bottom__form__box
            = f.text_field :name, autofocus: true, autocomplete: "name", class: "middle-show__login__bottom__form__box__name", id: "form", placeholder: "お名前は?",required:"required"
          .middle__login__bottom__form__box
            = f.email_field :email, autocomplete: "email", class: "middle__login__bottom__form__box__address", id: "form", placeholder: "メールアドレスは？",required:"required"
          .middle__login__bottom__form__box
            = f.password_field :password, autocomplete: "new-password", class: "middle__login__bottom__form__box__password", id: "form", placeholder: "パスワードは英数字6文字以上で",required:"required"
          .middle__login__bottom__form__box
            = f.password_field :password_confirmation, autocomplete: "new-password", class: "middle__login__bottom__form__box__password-second", id: "form", placeholder: "パスワードもう一回！",required:"required"
          .actions
            = f.submit "これで君も仲間だ！",class: "middle__login__bottom__form__button__submit"
.new-footer
  = render "devise/shared/links"
```
```ruby:app/controllers/users/registrations_controller.rb
class Users::RegistrationsController < Devise::RegistrationsController

  # GET /resource/sign_up
  def new
    super
  end

  def create
    @user = User.new(user_params)
    if @user.valid?
      @user.save
      sign_in(:user,@user)
      redirect_to root_path
    else
      render :new
    end
  end

  def edit
    
  end

  private

  def user_params
    params.require(:user).permit(:name,:email,:password,:password_confirmation)
  end

  # editでパスワード無効で変更するための記述
  def update_resource(resource, params)
    resource.update_without_password(params)
  end

end

```
登録段階では、特別なことはしてないんですよね。

#### :star: ログインページ

```ruby:app/views/devise/sessions/new.html.haml
.index-header
.main
  .main__login
    .main__login__top
      %p.main__login__top__text
        ようこそ♪( ´▽｀)
    .main__login__bottom
      .main__login__bottom__form
        = form_for(resource, as: resource_name, url: session_path(resource_name)) do |f|
          .main__login__bottom__form__box
            = f.email_field :email, autofocus: true, autocomplete: "email",class: "main__login__bottom__form__box__address", id: "form", placeholder: "メールアドレスよろ", required:"required"
          .main__login__bottom__form__box
            = f.password_field :password, autocomplete: "current-password",class: "main__login__bottom__form__box__password", id: "form", placeholder: "パスワードよろ", required:"required"
          %label.main__login__bottom__form__button 
            = f.submit class: "main__login__bottom__form__button__submit", value: "いざゆかん！"
.index-footer
  %h6.guide
    = render "devise/shared/links"
```

```ruby:app/controllers/users/sessions_controller.rb
class Users::SessionsController < Devise::SessionsController
  # GET /resource/sign_in
  def new
    super
  end

end

```
ログイン画面はdeviseの機能をそのままに見た目変えた感じです。

**私が作成時に知ったこと**
autofocus: true
これは自動フォーカスを意味しており、ページを開いたらそこにすぐに入力できるようにするというコード

ログイン・登録はあまり特別なところはないですね。