認可の実装の要約みなさんおはようございます。10章の認可についてまとめてみました。良ければ見ていってください。認証と認可の違い最初に似ている単語である認証と認可の違いについて簡単に説明しようと思います。認証とは・・・サイトにログインしているユーザーを識別すること認可とは・・・現在ログインしているユーザーができる行動を管理することです。認可を具体例を挙げるならば、プロフィールの編集が挙げられます。自分のだけでなく、他人のも変えられたらやりたい放題になってしましますよね。そのようなことが無いように、認可で行動を管理します。認可の実装それでは実装についてまとめましたので、ぜひ見ていってください。具体的にはログインしているユーザーは自分のプロフィール以外は編集できないという認可を実装していきます。許可されていないユーザーがアクセスしようとした時にはbeforeフィルターを使います。これは何らかの処理が実行される直前に行うメソッドです。root_urlendendこれでまずログインしていないユーザーはedit,updateアクションを行おうとしたらroot_urlにリダイレクトします。デフォルトではbeforeアクションは全てのアクションに適用されるためonlyで指定します。次にログインしているユーザーは自分の情報以外変更できないようにします。別のユーザーの情報を変更しようとしたらリダイレクトさせたいのでcorrect_userというメソッドを作成し、beforeフィルターで呼び出します。current_userの部分を変更します。current_user(@user)end最後にログインした後に元々アクセスしようとしていたページにリダイレクトさせるアクションを作りたいと思います。ユーザーを希望のページにリダイレクトさせるにはそれらのページをあらかじめ保存しておき、ログインができたらそのページにリダイレクトさせるという動作が必要になります。これらの動作をstore_location,redirect_back_orメソッドで定義します。default)session.delete[:following_url]endstore_locationメソッドではrequestに送られてきたurlをsession変数のfowarding_urlキーに格納します。store_locationはユーザーがログインしてない時にedit,udateアクションしようとした時に行いたいのでlogged_in_userに加えます。login_urlendendフォワーディング自体を実装するにはrediret_back_orメソッドを追加します。このメソッドはsession[:fowarding_url]の値がtrueならそのurlに、なければデフォルトの値に飛びます。デフォルトはcreateアクションに設定します。userend説明は以上です。最後まで見ていただきありがとうございました。認可の実装の要約にコメントremember機能の実装おはようございます。tutorial9章、remember機能の実装についてまとめたいと思います。永続的セッションを実装するための実装は以下のように記述されました。記憶トークンにランダムな文字列を用いるブラウザのcookiesにトークンを保存するときは有効期限を設定するトークンはハッシュ値にしてから保存するブラウザのcookiesに保存するユーザーidは暗号化する永続ユーザーIDを含むcookiesを受け取ったら、そのIDでデータベースを検索し、記憶トークンのcookiesがデータベース内のハッシュ値と一致することを確認する少しわかりにくいですよね笑初めて読んだときはわけ分からなくなりました。これを自分なりに解釈したところ記憶トークンをランダムな文字列を用いて作成し、さらにそれを暗号化した記憶ダイジェストを作るユーザーの暗号化済みIDと記憶トークンを使いcookiesを作成するユーザーがサイトに来た際、暗号化済みのIDと記憶トークンを持ちいて認証を行うといった流れかなと思います。remember機能の実装では、早速説明していこうと思います。remember_digestの追加まず、最初にユーザーに記憶トークンを持たせるためのremember_digestカラムをUserモデルに追加します。db:migrateこの二つのコマンドで実装できました。記憶トークンはランダムな文字列でなければなりません。TutorialではRuby標準ライブラリのSecureRandomモジュールにあるurlsafe_base64メソッドを使います。よって以下のメソッドをUserモデルに追記します。User.remember_tokenSecureRandom.urlsafe_base64endこれによりランダムな文字列が追加されます。User.rememberメソッドで記憶トークンをユーザーと関連付け、記憶ダイジェストをDBに保存するremeber_digest(記憶ダイジェスト)は追加しましたが、記憶トークンはまだ追加されていません。そのため、まずattr_accessorメソッドにremember_token(記憶トークン)を宣言し、アクセスできるようにします。User.new_tokenupdate_attribute(:remember_digest,User.digest(remember_token))endcookiesで永続セッション作成ユーザーの暗号化済みのIDと記憶トークンをcookiesに保存して永続セッションを作成します。これにはcookiesメソッドを使います。cookiesは一つの値と有効期限から出来ています。20.years.from_now.utc}上記のコードはpermanentメソッドを使うとシンプルになります。user.idと記述します。ユーザーIDと記憶トークンはセットで使うのでこちらも永続的でなければなりません。このままだとセキュリティ的に良しとしないのでさらに改良します。user.idsignedメソッドによって暗号化できます。記憶トークンと記憶ダイジェストを使い認証を行うこの認証にはパスワード認証の際にも使ったbcryptを用います。authenticate?(remember_token)BCrypt::Password.new(remember_digest).is_password?(remember_token)end次は実際にユーザーを記憶します。今までのコードは一時セッションを前提に書かれていたのでそれを少し変更します。現時点では一時セッションしか扱ってないので正常には機能しません。永続セッションの場合はsession[:user_id]が存在すれば一時セッションからユーザーを取り出し、それ以外の場合はcookies[:user_id]から取り出し、対応する永続セッションにログインする必要があります。手順は以下の通りです。remember_digestをnilにするメソッドを作成1のメソッドを用いて、cookiesを削除し、ログアウトする1については記憶ダイジェストをnilで更新すればokです。nil)end次に1のメソッドを用いてcookiesを削除し、ログアウトします。プログラミングremember機能の実装にコメント「No!!!」と言える勇気おはようございます。本日は題名どおり「Noと言うことの大切さ」について書いていこうと思います。Noというのは決して悪いことではない「KY」この言葉が現れてから、日本ではみんなと考えを合わせることが美徳と考えられて来ました。学校においても、「仲間はずれはダメ。」、「誰とでも仲良くしなさい」と言われますよね。みんなに合わせるのがそんなに大事でしょうか?僕はそうは思いません。僕たちは他の誰でもない自分だけの人生を歩んでいるからです。「他の人がこれをやっているから、僕も」これって他人の考えを基に生きてますよね?そんな人生虚しくありませんか?だから、僕は人に合わせるようなことはしません。本当に自分がしたいことをします。人に流されることもまだまだありますけどね笑しかし、以前よりはNoと言えるようになってきました。8章まとめおはようございます。tutorial8章目を終えました。2周目だったのですが、それでも理解度は70~80%くらいでした笑なので、一度文章でまとめてみようと思います。第8章はセッションについてでした。sessionとはsessionとはwebサイトにアクセスしてサイトを閉じるまでに行う一連の動作のことを言います。サイトを開いていても一定時間が経過してしまうと2sessionにカウントされることもある。sessionの実装について書いていきたいと思います。ログインフォームの作成ログイン、ログアウトの要素を実装するためにsessionsコントローラーを作成します。sessionsこれでsessionsコントローラーを作成できました。次にログインフォームを作成します。routeとcontrollerは以下の通りです。newend次にhtmlですが、フォームにはform_forヘルパーを使います。%>form_forヘルパーの引数にはどのアクションに飛んで欲しいか記述する必要があります。ユーザーの作成の際には@userを引数に取るだけで「/usersのPOSTアクションに飛んでね。」と指示できましたが、sessionsにはモデルがないのでこのようには記述できません。routeに記述したことで名前付きルートが使用できます。入力欄はfオブジェクトによってhtmlフォームに対応する要素を作り出します。よって、入力欄のコードは以下のようになります。最初に無効な入力な処理を行います。'new'endログインフォームから受け取る値はparamsに入っています。params[:session]また、sessionはemail,passwordの二つのキーを持っています。createが受け取る値はparams[:session][:email],params[:email][:password]の二つです。これを使い認証していきます。'new'endendfind_byメソッドで該当するユーザーを検索します。authenticateメソッドで入力されたパスワードのハッシュ化された値と登録されている値が一致しているか確認しています。一致していればログインできます。ログイン認証は済んだので次はセッションを実装していきます。ここからたくさんのメソッドを書いていくのでそれらはhelperにまとめます。ログインにはsessionメソッドを使います。user.idこのメソッドは使い回せるように関数にします。user.idendこのヘルパーメソッドをcreateアクションに記述して完成です。'new'endendユーザーIDを他のページでも使えるようにする別のページでも現在のユーザーを呼び出すためにはsession[:user_id]からユーザー検索を行えばいいです。session[:user_id])else@current_userend最後に上記のif文をまとめます。最後にログアウト機能を実装します。root_urlend以上でログイン、ログアウト処理の実装が完了しました。文にしたことで多少は整理できたはず。8章まとめにコメントブログをするメリット今日は自分の考えを発信することの大切さについて書きたいと思います。自分の考えを発信するメリット1.自分の考えと似ている人が集まってくる。『僕自身はこう思う』、『僕はこうしたい』と口に出して言い続けることでその意見に賛同する人がどんどん集まってきます。反対に自分と意見が違う人はどんどん離れていきます。意見を発信することで自分らしく生きられる人間関係を築いて行くのが可能になるのです。これが一つ目の利点です。2.自分の考えを文字に起こすことで理解がより深まる。こちらは考えというより技術的な発信についてです。教材を読むと確かにわかった気になりますが、実際にそれを外部に発信しようとすると分かったつもりでいても理解できていない部分が明確になります。『ブログなどでアウトプットする』これでワンセットなのです。これが二つ目の利点です。他にも文章の組み立てが上手になったり、書いたことは記憶に残りやすいなどのメリットもあります。ブログは始めるためのコストもかからないので興味のある方は是非初めてみて下さい。カテゴリー:考え方ブログをするメリットにコメントGitについてまとめてみた。今日はgitについてまとめてみようと思います。gitとは何かgitとはソースコードを管理するサービスです。ソースコードを管理するメリットとしては、うっかりファイルを消してしまった時でも復旧可能である。コードの履歴を追える。開発を使う際は積極的に使いましょう。実際の使い方ここでは、githubを用いて説明していきます。initと打ち込みます。すると、ディレクトリ内にgitフォルダが出来上がります。これで準備はできました。今現在ファイルはステージングという待機用リポジトリに置かれています。pushでリモートリポジトリにアップするという三つの手順が必要です。ブランチやマージの使い方これらは共同開発でとても役に立ちます。ブランチとはリポジトリのコピーでそれを使い、それを元に変更を加えていきます。ブランチで行う変更はメインブランチに影響されないので開発自体に支障は出ません。最後にマージ(合流)してメインブランチに変更を取り込みます。以上がgitの説明になります。gitは会社に入ってチーム開発になると必須のスキルとなるので是非とも今のうちから意識して身につけていきたいですね。カテゴリー:プログラミングGitについてまとめてみた。コメント『嫌われる勇気』から考える人が変わる方法おはようございます。本日は僕が最近読んだ本、『嫌われる勇気』から人が変わる方法を考えていきたいと思います。1.あらすじこの本ではアドラー心理学と言うものを用いながら、幸せに生きる方法について説いていくお話です。アドラー心理学を研究している老人とその部屋に訪れた青年の対話形式で物語は進んでいきます。人は変われないのか人が変われない理由には原因論が関係していると思います。原因論とは過去の経験から今が決まると言う考え方です。『今日は疲れたから勉強しなくていいや』、『今週は仕事頑張ったから散財しよ』などです。アドラー心理学では逆から考えるそうです。『勉強したくないから今日は疲れたことを引き合いに出す。『散財したいから今週頑張ったことを引き合いに出す』と考えます。原因論は現在の目的にかなう過去を引き合いに出しています。反対に目的論は過去と今を引き離して考えます。過去の経験にとらわれずにいきていく事ができます。『人間が変われないのは変わる勇気がないからだ』とも言っています。これも原因論、目的論と関係しています。変わりたいと口だけで言っている人は過去の経験を出してきて、やはり行動しません。変わりたいと本気で思っている人は過去のことなど気にせず、今必死に努力しています。先ほども話した通り、過去の話をして言い訳している時点でもう終わっています。今日この日になりたい自分に向かって努力していくだけです。結局はそこだと思います。今を変えたいと覚悟をもち必死に取り組んでる人が幸せを掴めると思います。この本を読むと難しいことを考えずに、今この瞬間を生きないといけないなと思わされます。気になった方はぜひ読んでみてください。考え方『嫌われる勇気』から考える人が変わる方法にコメントHelperを使いこなそうおはようございます。本日はHelperについての説明をしていこうと思います。Helperって何?Helperとは文字通りHelp、助けてくれるものです。何を助けてくれるかと言うと、それはViewをよりシンプルに書くのをです。%>などはみなさん使ったことはありますよね?これ全部Helperなんです。Helperを使うメリット複数のviewに似たような記述がある時まとめる事ができる例えば次のようなコードがあったとします。href="#">Helper</a>など、複数に渡って同じ文字が書かれてるとします。同じ文字を何回も書くのは面倒ですよね。こんな時にHelperを使います。%></h1>このようにHelper内で関数として定義して、viewで関数を呼び出します。関数としてまとめる事で修正する時も関数を修正するだけなので手間が省けます。今回はHelperについて紹介しました。僕もまだtutorialを始めたばかりなのでアドバイスなどありましたら、どんどん聞かせてください。今日はありがとうございました。プログラミングHelperを使いこなそうにコメント物事を続けるために気をつけることおはようございます。本日は物事を続けるコツについてよく聞くけど問題点やそれに対する自分なりの考えを述べていきたいと思います。1.毎日やるべきノルマに疲れたこれは誰もが経験があると思いますが、最初に1日◯◯時間もする!!!と壮大な設定をしてしまい段々とやるのが面倒くさくなるパターンです。「これから◯◯時間もやるのか〜」と。笑こういう場合ですが、そもそも最初の設定が間違っています。最初のハードルはぐんっっと下げるべきなのです。塵も積もれば山となると言いますよね。最後は継続したもの勝ちなのです。2.やる時間がないこれについては簡単です。やるべきことをいつやるか時間を決めてその時間と前後1時間は絶対に予定を入れないようにするのです。僕自身2018年は簿記とプログラミングを学んでいました。1日最低でも6時間は時間が必要だと思ったので旅行はもちろん、1日遊びに行くこともありませんでした。1日は24時間と有限です。自分がしたいことに優先順位をつけて順位が高いものから時間を割り振っていくべきです。3.やる気が出ないこれは1と関連しています。「これから◯◯時間もやるのか」と。心理的ハードルが大分上がっています。最初の設定をぐんと下げたにも関わらずやる気が起きない。そんな時は「今日はやらなくていい!でも最初の動作だけはやろう!」ということです。ここでいう最初の動作とは勉強であれば、机に向かう、パソコンを開くなどです。それだけでいいの?と思われますが1番怖いのはハードルを上げすぎて挫折するパターンなのです。塵も積もれば山となります。1日で成功するようなことは絶対にありません。やる気が出ない方は最初にお金を投資することもおススメです。僕はプログラミングの勉強で挫けたことは何度もありますがその度に最初にスクール代の30万を払ったことを思い出し奮起していました笑あ、あと一つ。勉強中にスマホを見てしまうことよくありますよね?笑スマホは集中力を奪うのでとても厄介です。僕は自宅で勉強することが多いのですがスマホは絶対に部屋に持っていきません。視界に入るだけでアウトだと思ってるので。見ていただきありがとうございました。まとめおはようございます。tutorialに苦戦しながらも取り組み、先ほど4章が終了しました。一度このブログ内でまとめようと思います。文字列は””で囲み、表示させる。今の首相は麻生さん文字列を組み立てる方法には式展開というものもある。これには#{}というものを使う。"麻生さん""今の首相は#{name}"=>今の首相は麻生さんこのように#{}は変数を文字列に入れるときに使用します。文字列はダブルクォートかシングルクォートで囲み、表示させます。シングルクォーテーションだと式展開ができませんので僕は基本的にはダブルクォートを使います。シングルクォートは#{}をそのまま表示させたいと言った時に使用します。オブジェクトオブジェクトとはメッセージに応答するものです。6これはlength(何文字?)というメッセージに”basket”文字列が応答したものです。同様に"basket".empty?=>falseこちらはempty?(空っぽ?)というメッセージに対してfalseと返しています。true,falseという論理値を返すことを?で表します。if文でも使われます。s.empty?"yes,empty"else"nonempty"end=>yes,empty"なお、論理値はそれぞれ&&(かつ),||(または),!(not)でも使われます。!b.empty?なお、上記の文は全てif文が後ろに来てますよね。trueの処理しか書かない場合、このようにif文を後ろに書くことが可能になります。次に数字を文字列に変換する方法です。変換するには”to_s”を使います。"1"メソッドメソッドは引数があることが大前提のように思ってましたが、なくても良いらしいです。string_massage=>"empty"このように引数を指定しなくてもエラーが出ません。言いますと、メソッドを定義した段階でデフォルト値を含めているからです。”)これを定義したことによって引数が渡されなかった場合はデフォルト値が渡されるようになります。rubyでは一度値を返したらその後の値は表示されません。"nonempty"end上の関数の場合、2行目はご存知if文ですね。strが空っぽだったらtrueで”empty”が返されます。その場合もう値を返したので3行目のnonemptyは表示されません。次に2行目がfalseだった場合、”empty”は返されません。一度も値を返していないので3行目に”nonempt”を返すことができます。このようにif文は書き直すことができます。>>>文字列を区切り表示させます。"tarou"次に配列です。配列は特定の順序をもつ要素のリストです。"三郎"]インデックスを付けることによって特定の要素だけを取り出すことができます。"太郎"配列の追加にはpushメソッドを使います。"四郎"to_aメソッドは範囲を配列に変換できます。#配列に変換=>[0,1,2,3,4,5,6,7,8,9]mapメソッドは渡されたブロックを配列や範囲オブジェクトに適用し、結果を返す。25]これは1~5の数字をそれぞれ二乗して新しく配列に入れています。ハッシュとシンボルハッシュは配列と似ていますがインデックスとして整数値以外も呼び出せるのが異なる点です。"asou"}president[:first_name]=>"tarou"このようにハッシュは要素を{}で囲み、その中にキーと対応する値をかきます。railsでは文字列よりもシンボルが主流だそうです。シンボルとはクォートのかわりに先頭に「:」を付けることです。先ほどの文は次のように直せます。"asou"}president[:first_name]=>"tarou"と表記することも可能です。ハッシュの値にはなんでも使うことが出来、他のハッシュを使うことも可能です。"man"}params[:user][:name]=>"asou"また、ハッシュもeachメソッドに対応します。"私の#{key}は#{value}です"endこのようにハッシュでeach文を作る場合はキーと値の二つの変数を渡すことを注意してください。最後にクラスの作成します。formatted_email"#{@name}>#{@email}"endendattr_accessor・・・こちらはname,email属性(attributes)にそれぞれ対応したアクセサーを作成します。次のinitializeメソッドは新たにインスタンスを作成した時に自動で呼び出されるメソッドです。attributesのそれぞれのキーに対応する値を@name,@email変数に代入します。変数の頭に@を付けることでビューでも使用可能になります。最後のformatted_emailは式展開が使われていますね。最後まで見てくださった方々ありがとうございました。WordPress.。