Laravel登陸重構(gòu)

需要使用laravel搭建一個后臺內(nèi)容管理系統(tǒng)籽孙,但是laravel默認(rèn)的登陸注冊不能滿足目前的需求

登陸的話薛夜,首先需求是不一定需要郵箱進(jìn)行注冊,還可以直接使用用戶名等進(jìn)行登陸或者手機(jī)號

1. 登陸路由的確定

首先我們必須找到它默認(rèn)的登陸路由,這樣的話我們可以直接重寫它的登陸方法

默認(rèn)的登陸路由是直接在后面輸入\auth\login,這個可以在手冊里找到舟扎,如果不是得話也可能是直接輸入login

然后它訪問的方法是Auth\AuthController@getLoginAuth\AuthController@postLogin

它們一個是顯示登陸頁面get請求悴务,一個是請求登陸使用的post請求

但是如果你查看這個controller的話睹限,就會發(fā)現(xiàn)找不到這個方法。這是因為它已經(jīng)在其它地方已經(jīng)實(shí)現(xiàn)了這個方法

目前的話讯檐,我們不需討論它是如何實(shí)現(xiàn)的羡疗,感興趣的可以查看下源碼。

2. 顯示登陸頁

這個使用的是getLogin這個方法别洪,這個的話其實(shí)沒有什么要改的話叨恨,我們可以還直接使用它默認(rèn)的,不需要重寫

只需要找到它的視圖文件蕉拢,然后改它的視圖文件就好特碳。一般在resources\views\auth\login.blade.php文件

3. 請求登陸

這個使用的是postLogin這個方法诚亚,這個的話因為表名,字段名午乓,字段站宗,包括驗證等,都不符合我們的要求益愈,所以需要重寫
重寫的話可以使用兩種方法接收傳過來的數(shù)據(jù):
一種是使用request的方法接收數(shù)據(jù)梢灭,另外一種是使用Input::get的方法獲取數(shù)據(jù)。

Request的話需要引入use Illuminate\Http\Request

Input的話需要引入use Input

這里的話蒸其,推薦大家用request敏释,因為畢竟是PHP新特性。

另外使用Request類來接收的話摸袁,需要在參數(shù)里寫入 Request $request

4. 更改model

根據(jù)laravel的官方文檔介紹钥顽,驗證的話,其實(shí)使用的是App\User類靠汁,如果你建立的用戶表或者字段跟model里的不一樣蜂大,就需要更改

(這里說明下,不更改也可以蝶怔,我們需要手動使用session方法把用戶信息存入session里奶浦,更改User的好處是,可以使用laravel內(nèi)置的方法)

更改的方面主要是踢星,表名澳叉,主鍵,哪些字段可以賦值沐悦,已我的為例:

<?php
namespace App;

use Illuminate\Foundation\Auth\User as Authenticatable;

class User extends Authenticatable
{
    protected $table = 'finance_enewsuser';  //定義用戶表名稱
    protected $primaryKey = "userid";    //定義用戶表主鍵
    public $timestamps = false;         //是否有created_at和updated_at字段

    protected $fillable = [     //可以被賦值的字段
        'username','password','groupid','checked','styleid','filelevel','loginnum','lasttime','lastip','truename','email','pretime','preip'
    ];

    protected $hidden = [   //在模型數(shù)組或 JSON 顯示中隱藏某些屬性
        'password', 'remember_token',
    ];
}

根據(jù)自己的需求更改為和自己一樣的數(shù)據(jù)表名稱

5. 重寫方法和認(rèn)證用戶

重寫postLogin的方法

認(rèn)證的話成洗,可以使用laravel提供的Auth::attempt(['email' => $email, 'password' => $password])方法進(jìn)行認(rèn)證

注意把方法里的'email'和'password'兩個名稱改為和你數(shù)據(jù)庫里字段名稱相同的字段名稱(即,用戶名和密碼字段)

例:

Auth::attempt(['username' => $name, 'password' => $password])

上面所踊,我用戶數(shù)據(jù)表里的用戶名和密碼字段對應(yīng)于'username'和'password'字段

如果有人問泌枪,如果我用戶名不止一個字段概荷,該怎么辦秕岛,比如email和phone兩個字段都是用戶名,都可以登陸误证,這樣該怎么辦继薛?

其實(shí)我們可以使用兩次進(jìn)行認(rèn)證

例:

if (Auth::attempt(['email' => $name, 'password' => $password], 1)) {
    return redirect()->intended('/');
} else if (Auth::attempt(['phone' => $name, 'password' => $password], 1)) {
    return redirect()->intended('/');
}

其實(shí),完全不推薦這樣使用愈捅,可以在前面判斷好后在決定使用哪種認(rèn)證

6. 認(rèn)證失敗返回

上面的例子顯示的是成功的例子遏考,如果認(rèn)證失敗呢?比如用戶名不正確蓝谨,密碼不正確灌具,該怎么返回呢青团?

也是有兩種方法:

第一種是使用Validator類,來進(jìn)行驗證輸入的數(shù)據(jù)和返回錯誤信息

另外一種是使用輔助函數(shù)來完成

這里因為是登陸咖楣,所以也沒有特別需要驗證的督笆,所以我們使用輔助函數(shù)來完成

例:

redirect('login')->withInput($request->except('password'))->with('msg', '用戶名或密碼錯誤');

redirect表示重定向到哪個頁面

withInput表示重定向后存儲的一次性數(shù)據(jù),這里我們把用戶輸入的數(shù)據(jù)還返回過去

except方法表示返回除了指定鍵的所有集合項诱贿,這里我們把返回的數(shù)據(jù)里的密碼項給刪除

with帶一次性session重定向的數(shù)據(jù)

7. 前端顯示錯誤信息

因為我們使用的是輔助函數(shù)來返回的錯誤娃肿,所以我們接收的話也使用輔助函數(shù)來接收數(shù)據(jù)

這里我們使用session方法來接收這個錯誤

使用old('username')接收上次輸出的數(shù)據(jù)

8. 完成后的示例

AuthController

public function postLogin(Request $request)
    {
        $name = $request->input('username');
        $password = $request->input('password');
        if( empty($remember)) {  //remember表示是否記住密碼
            $remember = 0;
        } else {
            $remember = $request->input('remember');
        }
        //如果要使用記住密碼的話,需要在數(shù)據(jù)表里有remember_token字段
        if (Auth::attempt(['username' => $name, 'password' => $password], $remember)) {  
            return redirect()->intended('/');
        }
        return redirect('login')->withInput($request->except('password'))->with('msg', '用戶名或密碼錯誤');
    }

login.blade

<form class="login-form" action="{{ url('/login') }}" method="post">
        {!! csrf_field() !!}
        <h3 class="form-title font-green">登陸</h3>
        @if (session('msg'))
            <div class="alert alert-danger display-hide"  style="display: block;">
                <button class="close" data-close="alert"></button>
                <span>{{session('msg')}} </span>
            </div>
        @else
            <div class="alert alert-danger display-hide">
                <button class="close" data-close="alert"></button>
                <span> 請輸入用戶名或密碼  </span>
            </div>
        @endif
        <div class="form-group">
            <label class="control-label visible-ie8 visible-ie9">Username</label>
            <input class="form-control form-control-solid placeholder-no-fix" type="text" autocomplete="off" placeholder="Username" name="username" value="{{old('username')}}" /> </div>
        <div class="form-group">
            <label class="control-label visible-ie8 visible-ie9">Password</label>
            <input class="form-control form-control-solid placeholder-no-fix" type="password" autocomplete="off" placeholder="Password" name="password" /> </div>
        <div class="form-actions">
            <button type="submit" class="btn green uppercase">登陸</button>
            <label class="rememberme check">
                <input type="checkbox" name="remember" value="1" />記住密碼 </label>
        </div>
        <div class="create-account">
        </div>
    </form>




如果Auth::attempt認(rèn)證用戶后珠十,然后在其它頁面使用Auth::user()獲取不到用戶信息的話料扰,很可能就是App\User沒有配置正確

原文鏈接:Dennis`s blog

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個濱河市焙蹭,隨后出現(xiàn)的幾起案子晒杈,更是在濱河造成了極大的恐慌,老刑警劉巖孔厉,帶你破解...
    沈念sama閱讀 210,978評論 6 490
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件桐智,死亡現(xiàn)場離奇詭異,居然都是意外死亡烟馅,警方通過查閱死者的電腦和手機(jī)说庭,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 89,954評論 2 384
  • 文/潘曉璐 我一進(jìn)店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來郑趁,“玉大人刊驴,你說我怎么就攤上這事」讶螅” “怎么了捆憎?”我有些...
    開封第一講書人閱讀 156,623評論 0 345
  • 文/不壞的土叔 我叫張陵,是天一觀的道長梭纹。 經(jīng)常有香客問我躲惰,道長,這世上最難降的妖魔是什么变抽? 我笑而不...
    開封第一講書人閱讀 56,324評論 1 282
  • 正文 為了忘掉前任础拨,我火速辦了婚禮,結(jié)果婚禮上绍载,老公的妹妹穿的比我還像新娘诡宗。我一直安慰自己,他們只是感情好击儡,可當(dāng)我...
    茶點(diǎn)故事閱讀 65,390評論 5 384
  • 文/花漫 我一把揭開白布塔沃。 她就那樣靜靜地躺著,像睡著了一般阳谍。 火紅的嫁衣襯著肌膚如雪蛀柴。 梳的紋絲不亂的頭發(fā)上螃概,一...
    開封第一講書人閱讀 49,741評論 1 289
  • 那天,我揣著相機(jī)與錄音鸽疾,去河邊找鬼谅年。 笑死,一個胖子當(dāng)著我的面吹牛肮韧,可吹牛的內(nèi)容都是我干的融蹂。 我是一名探鬼主播,決...
    沈念sama閱讀 38,892評論 3 405
  • 文/蒼蘭香墨 我猛地睜開眼弄企,長吁一口氣:“原來是場噩夢啊……” “哼超燃!你這毒婦竟也來了?” 一聲冷哼從身側(cè)響起拘领,我...
    開封第一講書人閱讀 37,655評論 0 266
  • 序言:老撾萬榮一對情侶失蹤意乓,失蹤者是張志新(化名)和其女友劉穎,沒想到半個月后约素,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體届良,經(jīng)...
    沈念sama閱讀 44,104評論 1 303
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 36,451評論 2 325
  • 正文 我和宋清朗相戀三年圣猎,在試婚紗的時候發(fā)現(xiàn)自己被綠了士葫。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點(diǎn)故事閱讀 38,569評論 1 340
  • 序言:一個原本活蹦亂跳的男人離奇死亡送悔,死狀恐怖慢显,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情欠啤,我是刑警寧澤荚藻,帶...
    沈念sama閱讀 34,254評論 4 328
  • 正文 年R本政府宣布,位于F島的核電站洁段,受9級特大地震影響应狱,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜祠丝,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 39,834評論 3 312
  • 文/蒙蒙 一疾呻、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧纽疟,春花似錦罐韩、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,725評論 0 21
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽龙考。三九已至蟆肆,卻和暖如春矾睦,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背炎功。 一陣腳步聲響...
    開封第一講書人閱讀 31,950評論 1 264
  • 我被黑心中介騙來泰國打工枚冗, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留,地道東北人蛇损。 一個月前我還...
    沈念sama閱讀 46,260評論 2 360
  • 正文 我出身青樓赁温,卻偏偏與公主長得像,于是被迫代替她去往敵國和親淤齐。 傳聞我的和親對象是個殘疾皇子股囊,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 43,446評論 2 348

推薦閱讀更多精彩內(nèi)容