1. 程式人生 > >laravel 5入門系列——7

laravel 5入門系列——7

向laravel 5進軍——7

會話

由於Http協議是一個無狀態的協議,因此為在不同頁面保持使用者的登陸狀態,我們需要藉助會話在瀏覽器中臨時儲存使用者的身份資訊,保證使用者在不同頁面具有相同的登入狀態。

實現登陸以及退出功能

首先建立會話控制器,然後新增路由

php artisan make:controller SessionController
Route::get('login','[email protected]')->name('login');
Route::post('login', '[email protected]
'
)
->
name('login'); Route::delete('logout', '[email protected]')->name('logout');

其中GET方法的login返回登陸頁面,POST方法的login提交登陸資訊,DELETE方法的logout退出登入.
補充一條開發環境中檢測已經配置好的路由的命令php artisan route:list
現在應反回以下資訊

+--------+-----------+-------------------+---------------+-------------------------------------------------+--------------+
| Domain | Method    | URI               | Name          | Action                                          | Middleware   |
+--------+-----------+-------------------+---------------+-------------------------------------------------+--------------+
|        | GET|HEAD  | /                 |               | App\Http
\Controllers\HomePageController@home | web | | | GET|HEAD | api/user | | Closure | api,auth:api | | | GET|HEAD | login | login | App\Http\Controllers\SessionsController@login | web | | | POST | login | login | App\Http
\Controllers\SessionsController@store | web | | | DELETE | logout | logout | App\Http\Controllers\SessionsController@destroy | web | | | GET|HEAD | signup | signup | App\Http\Controllers\UserController@signup | web | | | GET|HEAD | users | users.index | App\Http\Controllers\UserController@index | web | | | POST | users | users.store | App\Http\Controllers\UserController@store | web | | | GET|HEAD | users/create | users.create | App\Http\Controllers\UserController@create | web | | | GET|HEAD | users/{user} | users.show | App\Http\Controllers\UserController@show | web | | | PUT|PATCH | users/{user} | users.update | App\Http\Controllers\UserController@update | web | | | DELETE | users/{user} | users.destroy | App\Http\Controllers\UserController@destroy | web | | | GET|HEAD | users/{user}/edit | users.edit | App\Http\Controllers\UserController@edit | web | +--------+-----------+-------------------+---------------+-------------------------------------------------+--------------+

寫好路由後寫會話控制器的方法:
create方法直接返回登陸的介面,store方法要驗證是否符合資料庫中的資料,delete方法要退出登入的狀態.藉助 Laravel 提供的 Authattempt方法可以讓我們很方便的完成使用者的身份認證操作,使用方法:

if (Auth::attempt(['email' => $email, 'password' => $password])) {
    // 該使用者存在於資料庫,且郵箱和密碼相符合
}

會話在建立的同時,也會種下一個名為 laravel_session 的 HTTP Cookie,以此 Cookie 來記錄使用者登入狀態,最終返回 true;如果匹配後兩個值不一致,則返回 false;如果使用者未找到,也返回 false。引用Auth前記得對其引用.

<?php

namespace App\Http\Controllers;

use Illuminate\Http\Request;
use Auth;

class SessionsController extends Controller
{
    public function login()
    {
        return view('login');
    }

     public function store(Request $request)
    {
       $credentials = $this->validate($request, [
           'email' => 'required|email|max:255',
           'password' => 'required'
       ]);

       if (Auth::attempt($credentials)) {
           session()->flash('success', '歡迎回來!');
           return redirect()->route('users.show', [Auth::user()]);
       } else {
           session()->flash('danger', '很抱歉,您的郵箱和密碼不匹配');
           return redirect()->back();
       }
    }

    public function destroy(){
           Auth::logout();
           session()->flash('success','退出成功!');
           return redirect('login');
    }
}

使用 session() 方法來訪問會話例項。而當我們想存入一條快取的資料,讓它只在下一次的請求內有效時,則可以使用 flash 方法。flash 方法接收兩個引數,第一個為會話的鍵,第二個為會話的值,我們可以通過下面這行程式碼的為會話賦值。redirect()->back();即返回了原頁面.session()呼叫內容可以寫成:
session()->get('success');此時會返回 歡迎回來!
值得注意的是,登陸的users.show路由是需要傳參的,這裡用到了Auth的Auth::user()方法,很方便.

延長session時長

如果使用者登入後沒有使用『記住我』功能,則登入狀態預設只會被記住兩個小時。如果使用了『記住我』功能,則登入狀態會被延長到五年。使用 Laravel 提供的『記住我』功能來儲存一個記憶令牌,用於長時間記錄使用者登入的狀態。而 Laravel 已預設為使用者生成的遷移檔案中已經包含了 remember_token 欄位,該欄位將用於儲存『記住我』令牌。

只需要將Attempt方法傳入第二個引數,即可開啟記住我的功能.

if (Auth::attempt($credentials, $request->has('remember'))) {
           session()->flash('success', '歡迎回來!');
           return redirect()->route('users.show', [Auth::user()]);
       } else {
           session()->flash('danger', '很抱歉,您的郵箱和密碼不匹配');
           return redirect()->back();
       }

這裡需要配合前端的檢視中表單新增一項remember的選項:

<div class="checkbox">
    <label><input type="checkbox" name="remember"> 記住我</label>
</div>

相關推薦

laravel 5入門系列——7

向laravel 5進軍——7 會話 由於Http協議是一個無狀態的協議,因此為在不同頁面保持使用者的登陸狀態,我們需要藉助會話在瀏覽器中臨時儲存使用者的身份資訊,保證使用者在不同頁面具有相同的登入狀態。 實現登陸以及退出功能 首先建立

Docker入門系列7 動態對映埠port mapping

為何想要動態對映埠呢? 因為剛開始run啟動容器時,並不知道里面需要對映哪些埠,等容器已建立了,想對映埠。 當然可以通過先commit成映象,然後再次run時指定埠,但會生成中間的映象,對於有輕微潔癖的我是不允許這種情況發生的。 我們可以對比對映前後iptables

【 D3.js 入門系列 --- 7 】 理解 update, enter, exit 的使用

    轉載請註明出處,謝謝。     在前面幾節中反覆出現瞭如下程式碼: svg.selectAll("rect") .data(dataset) .enter() .append("r

linux入門系列7--管道符、重定向、環境變數

前面文章我們學習了linux基礎命令,如果將不同命令組合使用則可以成倍提高工作效率。本文將學習重定向、管道符、萬用字元、轉義符、以及重要的環境變數相關知識,為後面的shell程式設計打下基礎。 一、IO重定向 前文我們已經講解了近60個linux常用命令,前文講解的檢視當前目錄下有哪些檔案的ls命令 [roo

[ Laravel 5.7 文件 ] 進階系列 —— 集合

簡介 Illuminate\Support\Collection 類為處理陣列資料提供了流式、方便的封裝。例如,檢視下面的程式碼,我們使用輔助函式 collect 建立一個新的集合例項,為每一個元素執行 strtoupper 函式,然後移除所有空元素: $collection = colle

Docker快速入門系列(三)——CentOS-7.5下使用yum命令快速安裝Docker CE

                                            《 CentOs-7.5下安裝Docker CE 》 先決條件 在安裝Docker CE前,CentOS 系統版本應該升級到64位版本的 CentOS 7或以上,在這兒

Laravel 5 系列入門教程(四)【最適合中國人的 Laravel 教程】【完結】

本文是本系列教程的完結篇,我們將一起給 Page 加入評論功能,讓遊客在前臺頁面可以檢視、提交、回覆評論,同時我們將在後臺完善評論管理功能,可以刪除、編輯評論。Page 和評論將使用 Eloquent 提供的“一對多關係”。最終,我們將得到一個個人部落格系統的雛形,並佈

QGIS(PYTHON3.5、QT5.7.1、QGIS3)系列二次開發環境

qgis c++ python 二次開發 QGIS(PYTHON3.5、QT5.7.1、QGIS3系列二次開發環境,所有環境以虛擬機方式提供,以便研究或直接使用。 具體包括:獨立應用二次開發環境(WINDOWS,LINUX);android二次開發;獨立應用PYTHON二次開發環境(WI

[ Laravel 5.6 文檔 ] 進階系列 —— 任務調度

測試 out node 強制 定期 ner send 特定 接收 簡介 Cron 是 UNIX、SOLARIS、LINUX 下的一個十分有用的工具,通過 Cron 腳本能使計劃任務定期地在系統後臺自動運行。這種計劃任務在 UNIX、SOLARIS、LINUX下術語為 Cro

Laravel 教程 - Web 開發實戰入門 ( Laravel 5.5 )購買鏈接

info 實戰 ima inf 教程 分享圖片 入門 bing mage ? Laravel 教程 - Web 開發實戰入門 ( Laravel 5.5 )購買鏈接: 推薦給你高品質的實戰課程 https://laravel-china.org/courses?rf=

Selenium入門系列5 下拉列表元素操作

鼠標 tag pan inline driver 學習 ima imp inner 本節課程的下拉框是那種默認隱藏,當鼠標移到菜單上下拉框才顯示的。如果直接getelement會報錯,提示元素不可見: so,得先讓下拉列表顯示出來再獲取元素 用到的新知識: is_

laravel 5.7 resources 本地化 簡體中文

使用方法: 新建目錄【專案目錄/resources/lang/zh】 按以下內容建立檔案,並將內容複製到檔案中 修改 config/app.php 'locale' => 'zh', 'fallback_locale' => 'zh', 'faker_locale' => 'z

Laravel 5.7 使用 PHP artisan migrate 的問題

    這是由於Laravel 預設使用 utf8mb4 字元, 包括支援在資料庫儲存「 表情」 。 如果你正在執行的 MySQL release 版本低於5.7.7 或 MariaDB release版本低於10.2.2 , 為了MySQL為它們建立索引, 你可能需要手動配置

arcgis jsapi介面入門系列7):滑鼠在地圖畫線

初始化,每個map執行一次就行 drawPolylineInit: function () { //畫幾何物件初始化 //新建一個圖形圖層用於存放畫圖過程中的圖形 let layer = new t

arcgis jsapi介面入門系列5):幾何(點線面)基本操作

點 point: function () { //通過wkt生成點 //wkt,代表點的座標 let wkt = "POINT(113.566806 22.22445)";

laravel 5.7 引入Illuminate\Http\Request 在類內呼叫 Request 提示不存在的問題

laravel報錯: ReflectionException Class App\Http\Controllers\Request does not exist 解決辦法: namespace App\Http\Controll

laravel 5.7 安裝 jwt-auth,jwt-auth 文件翻譯

laravel 5.7 安裝 jwt-auth(預設安裝的是 0.5.12 版本) github 地址: https://github.com/tymondesigns/jwt-auth 舊版文件: https://github.com/tymondesigns/jw

解讀ASP.NET 5 & MVC6系列7):依賴注入

在前面的章節(Middleware章節)中,我們提到了依賴注入功能(Dependency Injection),ASP.NET 5正式將依賴注入進行了全功能的實現,以便開發人員能夠開發更具彈性的元件程式,MVC6也利用了依賴注入的功能重新對Controller和View的服務注入功能進行了重新設計;未來的依賴

API 系列教程(二):結合 Laravel 5.5 和 Vue SPA 基於 jwt-auth 實現 API 認證

上一篇我們簡單演示了 Laravel 5.5 中 RESTful API 的構建、認證和測試,本教程將在上一篇教程的基礎上進行昇華。 我們將結合 Laravel 和 Vue 單頁面應用(SPA),在它們的基礎上引入 jwt-auth 實現 API 認證,由於 Laravel 集成了對 Vue

API 系列教程(一):基於 Laravel 5.5 構建 和 測試 RESTful API

隨著移動開發和 JavaScript 框架的日益流行,使用 RESTful API 在資料層和客戶端之間構建互動介面逐漸成為最佳選擇。 在本系列教程中,將會帶領大家基於 Laravel 5.5 來構建並測試帶認證功能的 RESTful API。 RESTful API 先要了解什麼是