ルート1を追加します。
//注册 ルート::取得( '/登録'、 "RegisterControllerの@インデックス")。 ルート::ポスト( '/登録'、 "RegisterController @登録"); //登录 ルート::( '/ログイン'、 "LoginControllerの@インデックス")を取得します。 ルート::ポスト( '/ログイン'、 "LoginControllerの@のログイン"); ルート::( '/ログアウト'、 "LoginControllerする@ログアウト")を取得。
2.ユーザーへのWebアプリガードサービスプロバイダのデフォルト設定
新しいのためのモデルに対応
アプリ\モデル\ユーザー::クラス
<?phpの リターン[ 'デフォルト' => [ 'ガード' => 'ウェブ'、 'パスワード' => 'ユーザー'、 ]、 'ガード' => [ 'ウェブ' => [ 'ドライバ' =>「セッション' 'プロバイダ'=> 'ユーザ' ]、 'API'=> 'ドライバ'=> 'トークン'、 'プロバイダ'=> 'ユーザ'、 'ハッシュ'=> falseを、 ]、 ]、 'プロバイダ'=> 'ユーザ'=> 'ドライバ'=>'雄弁」、 'モデル' =>アプリケーション\モデル\ユーザー::クラス、 ]、 // 'ユーザー' => [ // 'ドライバ' => 'データベース'、 // 'テーブル' => 'ユーザー'、 //]、 ]、 [パスワード] => [ 'ユーザー' => [ 'プロバイダ' => 'ユーザー'、 'テーブル' => 'password_resets'、 '有効期限が切れ' => 60、 ] ] ]。
3新しいアプリケーションの\ ModelsフォルダーUsermodelは、認証可能を継承します
<?phpの 名前空間のApp \モデル。 雄弁\モデル\を照らし\ Databaseを使用。 認証可能などを照らし\財団\認証\ユーザーを使用します。 クラスのユーザーは、認証可能拡張 { 保護$表=「ユーザーを」; 公共$ PRIMARYKEY = 'ID'; 保護されたの$充填可能= [ '名'、 'パスワード'、 ]; [= $隠されて保護された 'パスワード'、 'remember_token' ]; }
4コントロールとテンプレートを確立します
LoginController.php <?phpの 名前空間のApp \のHttp \コントローラ。 App \定数\のErrorCodeを使用します。 ブレイディ\ツール\データ\ディールを使用します。 ブレイディ\ツール\例外\ ExceptionResultを使用します。 ブレイディ\ツール\レスポンス\レスポンスを使用します。 照らし\のHttp \要求を使用します。 照らし\サポート\ファサード\認証を使用します。 照らし\サポート\ファサード\リダイレクトを使用します。 クラスLoginControllerコントローラー延び { パブリック関数インデックス() { 戻りビュー(「ログイン/インデックスを」); } パブリック関数ログイン(要求$リクエスト) { $データ= $要求- >入力(); $データ=ディール::($データ)をトリム。 $名= $データ[ '名前']; $パスワード= $データ[ 'パスワード']; {みてください (空($名)){場合 ExceptionResult :: ThrowExceptionを(のErrorCode :: USER_NOT_EMPTY)。 } (空($パスワード))なら、{ ExceptionResult :: ThrowExceptionを(のErrorCode :: PASSWORD_NOT_EMPTY)。 } $ is_remeber = boolval(ISSET($データ[ 'is_remember'])); もし(認証::試み([ '名前' => $名、 'パスワード' => $パスワード]、$のis_remeber)){ リターンリダイレクト( '/ポスト'); }他{ ExceptionResult :: ThrowExceptionを(のErrorCode :: LOGIN_FAILED)。 } }キャッチ(ExceptionResultの$ E){ リダイレクトを返す::バック() - >( 'エラー'、$ E->のgetMessage())と- > withInput(); リターンリダイレクト( '/ログイン'); } }
RegisterController.php <?phpの 名前空間のApp \のHttp \コントローラ。 App \定数\のErrorCodeを使用します。 ブレイディ\ツール\例外\ ExceptionResultを使用します。 ブレイディ\ツール\レスポンス\レスポンスを使用します。 照らし\のHttp \要求を使用します。 \ユーザーのApp \モデルを使用します。 クラスRegisterControllerコントローラー延び { パブリック関数インデックス() { 戻りビュー(「登録/インデックスを」); } パブリック関数レジスタ(要求$要求) { {試みる )($ DATA = $要求- >入力します。 IF(空($データ[ '名前'])){ ExceptionResult :: ThrowExceptionを(のErrorCode :: USER_NOT_EMPTY)。 } IF(空($データ[ 'パスワード'])){ ExceptionResult :: ThrowExceptionを(のErrorCode :: PASSWORD_NOT_EMPTY)。 } IF(空($データ[ 'password_confirmation'])){ ExceptionResult:ThrowExceptionを(のErrorCode :: PASSWORD_RE_NOT_EMPTY)。 } ($データ[ 'パスワード'] = $データ[ 'password_confirmation']!){場合 ExceptionResult :: ThrowExceptionを(のErrorCode :: PASSWORD_RE_NOT_SAME)。 } $ユーザ=新しいユーザー(); $ userExists = $ USER->ここで、( '名前'、$データ[ '名前']) - >最初の()。 もし(空($ userExists)!){ ExceptionResult :: ThrowExceptionを(のErrorCode :: USER_EXISTS)。 } する$ user->名= $データ[ '名前']; する$ user->パスワード= bcryptの($データ[ 'パスワード']); する$ user->保存(); }キャッチ(ExceptionResult $ E){ 応答::エラー($ E->にgetCode()、$ E->のgetMessage()); } } }
ログインテンプレートindex.blade.php <!DOCTYPE HTML> <HTML LANG = "ZH-CN"> <HEAD> <METAのcharset = "UTF-8"> <META HTTP-当量= "X-UA-Compatible-"コンテンツ= 「エッジのIE =」> <メタ名=「ビューポート」コンテンツ=「幅=幅デバイス、初期スケール= 1。」> <! - * 3つのメタタグをトップ*の上に配置する必要があり、その他のコンテンツ*必須*後に従ってください!- > <メタ名= "説明"コンテンツ= ""> <メタ名= "著者"コンテンツ= ""> <リンクのrel = "アイコン"のhref = "../../のfavicon.ico"> <タイトル>ログイン</ TITLE> < -コアのブートストラップCSS - >! <リンクのhref =「HTTPS://cdn.bootcss。 <リンクのhref = "http://v3.bootcss.com/assets/css/ie10-viewport-bug-workaround.css"のrel = "スタイルシート"> <! -このテンプレートのカスタムスタイル- > <リンクのhref = "http://v3.bootcss.com/examples/signin/signin.css"のrel = "スタイルシート"> <スクリプトSRC = "/ libに/ jqueryの/ jqueryの- 2.2.1.js"> </ SCRIPT> <スクリプトSRC = "/ libに/層/ layer.js"> </ SCRIPT> <スクリプトSRC = "https://unpkg.com/axios/dist/axios.min.js"> </ SCRIPT> <スクリプトSRC = "https://cdn.jsdelivr.net/npm/[email protected]"> </ SCRIPT> <! - HTML5のシムとRespond.js HTML5要素とメディアクエリのIE8のサポートのために- > <! - [IE 9 LT場合]> <スクリプトSRC = "https://cdn.bootcss.com/html5shiv/3.7.3/html5shiv.min.js"> </ SCRIPT> <スクリプトSRC = "https://cdn.bootcss.com/respond.js/1.4.2/respond.min.js"> </ SCRIPT> <[endifの] - !> </ HEAD> <BODY> < DIV CLASS = "コンテナ" ID = "アプリケーション"> <フォームクラス= "フォームサインイン"方式= "POST" ACTION = "/ログイン"> {{csrf_field()}} <H2 CLASS = "フォームサインイン-見出し">请登录</ H2> =用<ラベル" inputName」クラス= "SR-のみ">用户名</ label>は <入力V-モデル= "form.name"オートコンプリートは= "オフ"タイプ= "テキスト"値= "{{古い("名前")}}" NAME = "名前" ID = "inputName"クラス= "フォームコントロール"プレースホルダ= "用户民"オートフォーカス> = "inputPassword"クラスの<ラベル= "SR-のみ">密码</ label>は <入力Vモデル= "form.password"オートコンプリート= "オフ"タイプ= "パスワード"値= "{{古い( 'パスワード')}}" NAME = "パスワード" ID = "inputPassword"クラス= "フォーム-制御」プレースホルダ= "密码"> <DIV CLASS = "チェックボックス"> <ラベル> <入力V-モデル= "form.is_remember"タイプ= "チェックボックス"値= "{{古い( 'is_remember')}}"名前= "is_remember">记住我 </ label>は </ div> @If(セッション( 'エラー')) <DIV CLASS = "警告アラート危険"> {{セッション( 'エラー')}} </ DIV > @endif <ボタンクラス= "BTN BTN-LG BTNプライマリBTNブロック"タイプ= "提出" ID = "ログイン">登陆</ボタン> <a href="/register" class="btn btn-lg btn-primary btn-block" type="submit">去注册>> </a>の </ FORM> </ div> <! - /コンテナ- > <スクリプト> // VARアプリ=新しいヴュー({ //エル: '#app'、 //データ:{ //フォーム:{ //名前: ''、 //パスワード: ''、 // _token: ''、 // is_remember:0 //} //} //方法:{ //ログイン:関数(){ // this.form._token = $( "#_トークン")のval() / / axios.post( '/ログイン'、これ。フォーム) // .then(関数(応答){ // VARの解像度の=のresponse.data。 //もし(!res.code = 200){ // layer.msg(res.msg、{アイコン:2})。 //にconsole.log(res.msg) を返す// //}他{ // layer.msg( "登录成功"、{アイコン:1}); //のsetTimeout( "LOCATION.HREF = '/ポスト'"、2000); //} //}) // .catch(関数(誤差){ //はconsole.log(エラー); //})。 //} //} //}) </スクリプト> </ BODY> </ HTML>
index.blade.php登録 <!DOCTYPE HTML> <HTML LANG = "CN-ZH"> <HEAD> <METAのcharset = "UTF-8"> <META HTTP-当量= "X - UA互換"コンテンツ= " =エッジのIE「> <META NAME =」ビューポート「コンテンツ=」幅=幅デバイス、初期スケール= 1「>。 <! - * 3つのメタタグをトップ*の上に配置する必要があり、他のコンテンツ* *後に従わなければなりません!- > <メタ名= "説明"コンテンツ= ""> <メタ名= "著者"コンテンツ= ""> <リンクのrel = "アイコン"のhref = "../../のfavicon.ico"> <タイトル>登録</ TITLE> <! -コアのブートストラップCSS - > <リンク「https://cdn.bootcss.com/bootstrap/3のhref =。 <リンクのhref = "http://v3.bootcss.com/assets/css/ie10-viewport-bug-workaround.css"のrel = "スタイルシート"> <! -このテンプレートのカスタムスタイル- > <リンクのhref = "http://v3.bootcss.com/examples/signin/signin.css"のrel = "スタイルシート"> <スクリプトSRC = "/ libに/ jqueryの/ jqueryの- 2.2.1.js"> </ SCRIPT> <スクリプトSRC = "/ libに/層/ layer.js"> </ SCRIPT> <スクリプトSRC = "https://unpkg.com/axios/dist/axios.min.js"> </ SCRIPT> <スクリプトSRC = "https://cdn.jsdelivr.net/npm/[email protected]"> </ SCRIPT> <! - HTML5のシムとRespond.js HTML5要素とメディアクエリのIE8のサポートのために- > <! - [IE 9 LT場合]> <スクリプトSRC = "https://cdn.bootcss.com/html5shiv/3.7.3/html5shiv.min.js"> </ SCRIPT> <スクリプトSRC = "https://cdn.bootcss.com/respond.js/1.4.2/respond.min.js"> </ SCRIPT> <[endifの] - !> </ HEAD> <BODY> < DIV CLASS = "コンテナ" ID = "アプリケーション"> <DIV CLASS = "フォームサインイン"> の<input type = "隠れた" ID = "_トークン" NAME = "_トークン"値= "{{csrf_token()}}" > <h2のクラスには、= "フォームサインイン-見出し">请注册</ H2> の<div> <ラベル= "名前"クラス= "SR-のみ">用户名</ label>はのための <入力Vモデル=」 form.name "TYPE = "text"の名= "名前" ID = "名前"クラス= "フォームコントロール"オートコンプリート="「プレースホルダ= "用户名"オートフォーカスのスタイル= "マージン下オフ:10pxの;"> <ラベルクラス= "SR-のみ">密码</ label>は <入力V-モデル= "form.password"タイプ= "パスワード" NAME = "パスワード" ID = "inputPassword"オートコンプリート= "オフ"クラス= "フォームコントロール"プレースホルダ= "输入密码"> <ラベルクラス=」 SR-のみ」>重复密码</ label>は <入力V-モデル= "form.password_confirmation"タイプ= "パスワード"名前= "password_confirmation"クラス= "フォームコントロール"プレースホルダ= "重复输入密码"> <ボタンクラス= "BTN BTN-LG BTN-主要BTN-ブロック"タイプ= "提出" @ = "]レジスタ">注册</ボタン>クリック </ div> </ div> </ div> <! - /コンテナを- > <スクリプト> VARアプリ=新しいヴュー({ エル: '#app'、 データ:{ 形式:{ 名: ''、 パスワード: ''、 password_confirmation: ''、 _token: '' } }、 メソッド:{ ]レジスタ:関数(){ 。this.form._token = $( "#_トークン")のval() axios.post( '/登録'、this.formを) .then(関数(応答){ VAR RES = response.data; IF(res.code = 200!){ layer.msg(res.msg、{アイコン:2}); にconsole.log(res.msg) リターン }他{ layer.msg( "注册成功"、{アイコン:1}); setTimeout( "LOCATION.HREF = '/ログイン'"、2000); } }) .catch(関数(誤差){ にconsole.log(エラー); }); } } }) </ SCRIPT> </ body> </ HTML>