{"id":840,"date":"2025-06-12T00:54:20","date_gmt":"2025-06-11T16:54:20","guid":{"rendered":"https:\/\/www.zhaozhao123.cn\/php\/php-application-manual\/laravel\/840.html"},"modified":"2025-06-12T00:54:20","modified_gmt":"2025-06-11T16:54:20","slug":"%e5%a6%82%e4%bd%95%e5%9c%a8-laravel-%e4%b8%ad%e9%aa%8c%e8%af%81%e9%82%ae%e7%ae%b1%e5%92%8c%e5%af%86%e7%a0%81","status":"publish","type":"my1js","link":"https:\/\/www.zhaozhao123.cn\/php\/my1js\/840.html","title":{"rendered":"\u5982\u4f55\u5728 Laravel \u4e2d\u9a8c\u8bc1\u90ae\u7bb1\u548c\u5bc6\u7801"},"content":{"rendered":"<div class=\"wp-block-columns p-0 border is-layout-flex wp-container-core-columns-is-layout-28f84493 wp-block-columns-is-layout-flex\">\r\n<div class=\"wp-block-column is-layout-flow wp-block-column-is-layout-flow\">\r\n<div class=\"wp-block-columns px-4 py-3 border-bottom has-background is-layout-flex wp-container-core-columns-is-layout-28f84493 wp-block-columns-is-layout-flex\" style=\"background:linear-gradient(243deg,rgb(238,238,238) 0%,rgba(58,166,242,0.15) 100%)\">\r\n<div class=\"wp-block-column is-layout-flow wp-block-column-is-layout-flow\">\r\n<div class=\"wp-block-group is-nowrap is-layout-flex wp-container-core-group-is-layout-6c531013 wp-block-group-is-layout-flex\">\r\n<figure class=\"wp-block-image size-thumbnail is-resized is-style-rounded is-style-rounded--1\"><img decoding=\"async\" src=\"https:\/\/www.zhaozhao123.cn\/myitems\/images\/sites16\/2025\/06\/dyA-1-400x300.jpg\" alt=\"Bug&#32534;&#35793;&#29422;\" class=\"wp-image-1842\" style=\"object-fit:cover;width:30px;height:30px\"><\/figure>\r\n\r\n\r\n\r\n<h2 class=\"wp-block-heading my-0\" style=\"font-size:clamp(0.875rem, 0.875rem + ((1vw - 0.2rem) * 0.175), 1rem);\">Bug&#32534;&#35793;&#29422;<\/h2>\r\n<\/div>\r\n<\/div>\r\n<\/div>\r\n\r\n\r\n\r\n<div class=\"wp-block-columns px-xl-5 px-4 py-xl-4 py-3 is-layout-flex wp-container-core-columns-is-layout-28f84493 wp-block-columns-is-layout-flex\">\r\n<div class=\"wp-block-column is-layout-flow wp-block-column-is-layout-flow\">\r\n<p>&#22312; Laravel &#20013;&#39564;&#35777;&#37038;&#31665;&#21644;&#23494;&#30721;&#36890;&#24120;&#28041;&#21450;&#20351;&#29992; Eloquent ORM &#21644; Passport&#65288;&#29992;&#20110;&#36523;&#20221;&#39564;&#35777;&#65289;&#12290;&#20197;&#19979;&#26159;&#19968;&#20010;&#22522;&#26412;&#30340;&#27969;&#31243;&#21644;&#31034;&#20363;&#20195;&#30721;&#65306;<\/p>\n<h3>1. &#23433;&#35013; Passport<\/h3>\n<p>&#39318;&#20808;&#65292;&#20320;&#38656;&#35201;&#23433;&#35013; Passport&#12290;&#22914;&#26524;&#20320;&#36824;&#27809;&#26377;&#23433;&#35013;&#65292;&#21487;&#20197;&#36890;&#36807; Composer &#36827;&#34892;&#23433;&#35013;&#65306;<\/p>\n<pre><code class=\"language-bash\">composer require laravel\/passport<\/code><\/pre>\n<h3>2. &#37197;&#32622; Passport<\/h3>\n<p>&#36816;&#34892;&#20197;&#19979;&#21629;&#20196;&#26469;&#29983;&#25104;&#23494;&#38053;&#21644;&#37197;&#32622;&#25991;&#20214;&#65306;<\/p>\n<pre><code class=\"language-bash\">php artisan passport:install<\/code><\/pre>\n<h3>3. &#21019;&#24314;&#29992;&#25143;&#27169;&#22411;&#21644;&#36801;&#31227;<\/h3>\n<p>&#21019;&#24314;&#19968;&#20010;&#26032;&#30340;&#29992;&#25143;&#27169;&#22411;&#65292;&#24182;&#20026;&#20854;&#21019;&#24314;&#36801;&#31227;&#25991;&#20214;&#65306;<\/p>\n<pre><code class=\"language-bash\">php artisan make:model User --migration<\/code><\/pre>\n<p>&#22312; <code>User<\/code> &#27169;&#22411;&#20013;&#28155;&#21152;&#37038;&#31665;&#23383;&#27573;&#65306;<\/p>\n<pre><code class=\"language-php\">namespace App;\n\nuse IlluminateContractsAuthMustVerifyEmail;\nuse IlluminateFoundationAuthUser as Authenticatable;\nuse IlluminateNotificationsNotifiable;\n\nclass User extends Authenticatable implements MustVerifyEmail\n{\n    use Notifiable;\n\n    protected $fillable = [\n        'name', 'email', 'password',\n    ];\n\n    protected $hidden = [\n        'password', 'remember_token',\n    ];\n\n    public function sendEmailVerificationNotification()\n    {\n        $this-&gt;notify(new VerifiesEmail);\n    }\n}<\/code><\/pre>\n<h3>4. &#21019;&#24314;&#35748;&#35777;&#36335;&#30001;<\/h3>\n<p>Laravel &#30340;&#40664;&#35748;&#35748;&#35777;&#36335;&#30001;&#24050;&#32463;&#21253;&#21547;&#20102;&#37038;&#31665;&#21644;&#23494;&#30721;&#30340;&#39564;&#35777;&#36923;&#36753;&#12290;&#20320;&#21487;&#20197;&#36890;&#36807;&#35775;&#38382; <code>\/login<\/code> &#26469;&#24320;&#22987;&#30331;&#24405;&#36807;&#31243;&#12290;<\/p>\n<h3>5. &#39564;&#35777;&#37038;&#31665;&#21644;&#23494;&#30721;<\/h3>\n<p>&#22312;&#25511;&#21046;&#22120;&#20013;&#39564;&#35777;&#37038;&#31665;&#21644;&#23494;&#30721;&#65306;<\/p>\n<pre><code class=\"language-php\">namespace AppHttpControllersAuth;\n\nuse AppUser;\nuse IlluminateHttpRequest;\nuse IlluminateSupportFacadesAuth;\nuse IlluminateSupportFacadesValidator;\n\nclass AuthController extends Controller\n{\n    public function login(Request $request)\n    {\n        $validator = Validator::make($request-&gt;all(), [\n            'email' =&gt; 'required|email|max:255|unique:users,email',\n            'password' =&gt; 'required|min:6',\n        ]);\n\n        if ($validator-&gt;fails()) {\n            return response()-&gt;json(['error' =&gt; $validator-&gt;errors()], 400);\n        }\n\n        try {\n            if (!Auth::attempt(['email' =&gt; $request['email'], 'password' =&gt; $request['password']])) {\n                return response()-&gt;json(['error' =&gt; 'Invalid credentials'], 401);\n            }\n\n            $user = Auth::user();\n            $token = $user-&gt;createToken('api-token')-&gt;accessToken;\n\n            return response()-&gt;json(['access_token' =&gt; $token, 'user' =&gt; $user], 200);\n        } catch (Exception $e) {\n            return response()-&gt;json(['error' =&gt; 'Something went wrong'], 500);\n        }\n    }\n}<\/code><\/pre>\n<h3>&#31034;&#20363;&#20195;&#30721;<\/h3>\n<p>&#20197;&#19979;&#26159;&#19968;&#20010;&#23436;&#25972;&#30340;&#31034;&#20363;&#20195;&#30721;&#65292;&#23637;&#31034;&#20102;&#22914;&#20309;&#22312;&#25511;&#21046;&#22120;&#20013;&#39564;&#35777;&#37038;&#31665;&#21644;&#23494;&#30721;&#65306;<\/p>\n<pre><code class=\"language-php\">&lt;?php\n\nnamespace AppHttpControllersAuth;\n\nuse AppUser;\nuse IlluminateHttpRequest;\nuse IlluminateSupportFacadesAuth;\nuse IlluminateSupportFacadesValidator;\n\nclass AuthController extends Controller\n{\n    public function login(Request $request)\n    {\n        $validator = Validator::make($request-&gt;all(), [\n            'email' =&gt; 'required|email|max:255|unique:users,email',\n            'password' =&gt; 'required|min:6',\n        ]);\n\n        if ($validator-&gt;fails()) {\n            return response()-&gt;json(['error' =&gt; $validator-&gt;errors()], 400);\n        }\n\n        try {\n            if (!Auth::attempt(['email' =&gt; $request['email'], 'password' =&gt; $request['password']])) {\n                return response()-&gt;json(['error' =&gt; 'Invalid credentials'], 401);\n            }\n\n            $user = Auth::user();\n            $token = $user-&gt;createToken('api-token')-&gt;accessToken;\n\n            return response()-&gt;json(['access_token' =&gt; $token, 'user' =&gt; $user], 200);\n        } catch (Exception $e) {\n            return response()-&gt;json(['error' =&gt; 'Something went wrong'], 500);\n        }\n    }\n}<\/code><\/pre>\n<p>&#36825;&#20010;&#31034;&#20363;&#20195;&#30721;&#23637;&#31034;&#20102;&#22914;&#20309;&#22312; Laravel &#20013;&#39564;&#35777;&#37038;&#31665;&#21644;&#23494;&#30721;&#65292;&#24182;&#36820;&#22238;&#19968;&#20010;&#24102;&#26377; JWT &#35775;&#38382;&#20196;&#29260;&#30340;&#21709;&#24212;&#12290;<\/p>\r\n<\/div>\r\n<\/div>\r\n<\/div>\r\n<\/div><div class=\"wp-block-columns p-0 border is-layout-flex wp-container-core-columns-is-layout-28f84493 wp-block-columns-is-layout-flex\">\r\n<div class=\"wp-block-column is-layout-flow wp-block-column-is-layout-flow\">\r\n<div class=\"wp-block-columns px-4 py-3 border-bottom has-background is-layout-flex wp-container-core-columns-is-layout-28f84493 wp-block-columns-is-layout-flex\" style=\"background:linear-gradient(243deg,rgb(238,238,238) 0%,rgba(58,166,242,0.15) 100%)\">\r\n<div class=\"wp-block-column is-layout-flow wp-block-column-is-layout-flow\">\r\n<div class=\"wp-block-group is-nowrap is-layout-flex wp-container-core-group-is-layout-6c531013 wp-block-group-is-layout-flex\">\r\n<figure class=\"wp-block-image size-thumbnail is-resized is-style-rounded is-style-rounded--2\"><img decoding=\"async\" src=\"https:\/\/www.zhaozhao123.cn\/myitems\/images\/sites16\/2025\/06\/zp-400x300.jpg\" alt=\"&#40657;&#26495;Bug&#35762;&#24072;\" class=\"wp-image-1849\" style=\"object-fit:cover;width:30px;height:30px\"><\/figure>\r\n\r\n\r\n\r\n<h2 class=\"wp-block-heading my-0\" style=\"font-size:clamp(0.875rem, 0.875rem + ((1vw - 0.2rem) * 0.175), 1rem);\">&#40657;&#26495;Bug&#35762;&#24072;<\/h2>\r\n<\/div>\r\n<\/div>\r\n<\/div>\r\n\r\n\r\n\r\n<div class=\"wp-block-columns px-xl-5 px-4 py-xl-4 py-3 is-layout-flex wp-container-core-columns-is-layout-28f84493 wp-block-columns-is-layout-flex\">\r\n<div class=\"wp-block-column is-layout-flow wp-block-column-is-layout-flow\">\r\n<body><h2>&#20171;&#32461;<\/h2><p>&#22312;&#26500;&#24314;Web&#24212;&#29992;&#31243;&#24207;&#26102;&#65292;&#23433;&#20840;&#24615;&#26159;&#39318;&#35201;&#20851;&#27880;&#28857;&#20043;&#19968;&#65292;&#23588;&#20854;&#26159;&#22312;&#22788;&#29702;&#29992;&#25143;&#20973;&#25454;&#65288;&#22914;&#30005;&#23376;&#37038;&#20214;&#22320;&#22336;&#21644;&#23494;&#30721;&#65289;&#26041;&#38754;&#12290;Laravel&#65292;&#19968;&#20010;&#24378;&#22823;&#30340;PHP&#26694;&#26550;&#65292;&#36890;&#36807;&#20869;&#32622;&#21151;&#33021;&#31616;&#21270;&#20102;&#39564;&#35777;&#36807;&#31243;&#12290;&#22312;&#36825;&#31687;&#25945;&#31243;&#20013;&#65292;&#25105;&#20204;&#23558;&#20840;&#38754;&#20171;&#32461;&#20351;&#29992;Laravel&#36827;&#34892;&#30005;&#23376;&#37038;&#20214;&#21644;&#23494;&#30721;&#39564;&#35777;&#30340;&#26041;&#27861;&#12290;<\/p><h2>&#20197;&#39564;&#35777;&#24320;&#22987;&#12290;<\/h2><p>&#39564;&#35777;&#22312;&#30830;&#20445;&#24212;&#29992;&#31243;&#24207;&#23433;&#20840;&#24615;&#21644;&#32500;&#25252;&#25968;&#25454;&#23436;&#25972;&#24615;&#26041;&#38754;&#36215;&#30528;&#33267;&#20851;&#37325;&#35201;&#30340;&#20316;&#29992;&#12290;Laravel &#25552;&#20379;&#20102;&#22810;&#31181;&#26041;&#24335;&#26469;&#39564;&#35777;&#25968;&#25454;&#65307;&#25105;&#20204;&#23558;&#20174;&#25511;&#21046;&#22120;&#39564;&#35777;&#24320;&#22987;&#12290;<\/p><pre><code>\/\/ In any controller method\n$request-&gt;validate([\n    'email' =&gt; 'required|email|unique:users,email',\n    'password' =&gt; 'required|string|min:6',\n]);<\/code><\/pre><p>&#36825;&#27573;&#31616;&#21333;&#30340;&#20195;&#30721;&#21487;&#20197;&#30830;&#20445;&#30005;&#23376;&#37038;&#20214;&#22312;&ldquo;&#29992;&#25143;&rdquo;&#34920;&#20013;&#26082;&#21807;&#19968;&#21448;&#26684;&#24335;&#27491;&#30830;&#65292;&#24182;&#19988;&#23494;&#30721;&#31526;&#21512;&#26368;&#23567;&#38271;&#24230;&#35201;&#27714;&#12290;<\/p><h2>&#34920;&#21333;&#39564;&#35777;&#65306;&#26816;&#26597;&#25968;&#25454;&#36755;&#20837;&#26159;&#21542;&#31526;&#21512;&#39044;&#26399;&#25110;&#35201;&#27714;&#12290;<\/h2><p>&#23545;&#20110;&#26356;&#22797;&#26434;&#30340;&#22330;&#26223;&#65292;&#24744;&#21487;&#33021;&#38656;&#35201;&#23558;&#39564;&#35777;&#36923;&#36753;&#20174;&#25511;&#21046;&#22120;&#20013;&#20998;&#31163;&#20986;&#26469;&#12290;Laravel&#30340;Form Request&#26159;&#19968;&#20010;&#38750;&#24120;&#36866;&#21512;&#36825;&#31181;&#38656;&#27714;&#30340;&#24037;&#20855;&#12290;<\/p><pre><code>php artisan make:request UserRegistrationRequest<\/code><\/pre><p>&#35831;&#25552;&#20379;&#38656;&#35201;&#20462;&#25913;&#30340;&#31867;&#20195;&#30721;&#65292;&#20197;&#20415;&#25105;&#36827;&#34892;&#32534;&#36753;&#21644;&#28155;&#21152;&#39564;&#35777;&#35268;&#21017;&#30340;&#24037;&#20316;&#12290;<\/p><pre><code>public function rules()\n{\n    return [\n        'email' =&gt; 'required|email|unique:users,email',\n        'password' =&gt; 'required|min:6|confirmed',\n    ];\n}<\/code><\/pre><p>&#28982;&#21518;&#65292;&#22312;&#25511;&#21046;&#22120;&#26041;&#27861;&#20013;&#31867;&#22411;&#27880;&#35299;&#35831;&#27714;&#31867;&#65306;<\/p><pre><code>public function store(UserRegistrationRequest $request)\n{\n    \/\/ The incoming request is valid...\n\n    \/\/ Retrieve the validated input...\n    $validated = $request-&gt;validated();\n\n    \/\/ Continue registration...\n}<\/code><\/pre><h2>&#33258;&#23450;&#20041;&#39564;&#35777;&#35268;&#21017;<\/h2><p>&#22914;&#26524;&#39044;&#23450;&#20041;&#30340;&#26657;&#39564;&#35268;&#21017;&#19981;&#31526;&#21512;&#24744;&#30340;&#38656;&#27714;&#65292;&#24744;&#21487;&#20197;&#21019;&#24314;&#33258;&#23450;&#20041;&#35268;&#21017;&#12290;<\/p><pre><code>php artisan make:rule ValidPassword<\/code><\/pre><p>&#28982;&#21518;&#65292;&#22312;&#21019;&#24314;&#30340;&#31867;&#20013;&#23450;&#20041;&#20320;&#30340;&#36923;&#36753;&#65306;<\/p><pre><code>public function passes($attribute, $value)\n{\n    return preg_match('\/[A-Z]\/', $value) &amp;&amp; \n           preg_match('\/[a-z]\/', $value) &amp;&amp; \n           preg_match('\/[0-9]\/', $value) &amp;&amp; \n           strlen($value) &gt;= 8;\n}\n\npublic function message()\n{\n    return 'The :attribute must be at least 8 characters and include at least one uppercase letter, one lowercase letter, and one number.';\n}<\/code><\/pre><p>&#29616;&#22312;&#65292;&#35831;&#20351;&#29992;&#33258;&#23450;&#20041;&#35268;&#21017;&#22914;&#19979;&#65306;<\/p><pre><code>'password' =&gt; ['required', new ValidPassword],<\/code><\/pre><h2>API&#36164;&#28304;&#21644;&#39564;&#35777;<\/h2><p>&#22914;&#26524;&#22312;&#26500;&#24314;API&#65292;Laravel&#25552;&#20379;&#20102;&#38750;&#24120;&#26377;&#36259;&#30340;&#29305;&#24615;&#21483;&#20570;API&#36164;&#28304;&#65292;&#20063;&#21487;&#20197;&#38598;&#25104;&#39564;&#35777;&#65306;<\/p><pre><code>public function toArray($request)\n{\n    return [\n        'email' =&gt; 'required|email|unique:users,email',\n        'password' =&gt; 'required|string|min:6',\n    ];\n}<\/code><\/pre><p>&#36825;&#26377;&#21161;&#20110;&#32479;&#19968;&#21644;&#26684;&#24335;&#21270;API&#21709;&#24212;&#25968;&#25454;&#12290;<\/p><h2>&#22788;&#29702;&#39564;&#35777;&#38169;&#35823;&#12290;<\/h2><p>&#38169;&#35823;&#21464;&#37327;&#20250;&#19982;&#25152;&#26377;&#35270;&#22270;&#20849;&#20139;&#65292;&#30001;IlluminateViewMiddlewareShareErrorsFromSession&#20013;&#38388;&#20214;&#25552;&#20379;&#65292;&#35813;&#20013;&#38388;&#20214;&#23646;&#20110;web&#20013;&#38388;&#20214;&#32452;&#12290;<\/p><p>&#22312; Blade &#27169;&#26495;&#20013;&#65292;&#20320;&#21487;&#20197;&#36825;&#26679;&#26174;&#31034;&#38169;&#35823;&#28040;&#24687;&#65306;<\/p><pre><code>@if ($errors-&gt;any())\n  {{ $error }}\n@endif<\/code><\/pre><h2>&#39640;&#32423;&#39564;&#35777;&#22330;&#26223;<\/h2><p>&#23545;&#20110;&#26356;&#39640;&#32423;&#30340;&#22330;&#26223;&#65292;&#24744;&#21487;&#20197;&#20351;&#29992;&#22810;&#31181;&#20854;&#20182;&#21151;&#33021;&#65292;&#22914;&#26465;&#20214;&#39564;&#35777;&#12289;&#38057;&#23376;&#39564;&#35777;&#20197;&#21450;&#36890;&#36807;&#32452;&#21512;&#19981;&#21516;&#31867;&#22411;&#30340;&#39564;&#35777;&#35268;&#21017;&#26469;&#21019;&#24314;&#22797;&#26434;&#30340;&#39564;&#35777;&#24773;&#26223;&#12290;<\/p><pre><code>'email' =&gt; [\n    'required',\n    Rule::unique('users')-&gt;where(function ($query) {\n        return $query-&gt;where('account_id', 1);\n    }),\n],\n\n'password' =&gt; [\n    'required',\n    function($attribute, $value, $fail) {\n        if ($value !== 'my-secret-password') {\n            $fail($attribute.' is invalid.');\n        }\n    },\n]<\/code><\/pre><h2>&#32467;&#35770;<\/h2><p>&#22312;&#26412;&#25945;&#31243;&#20013;&#65292;&#25105;&#20204;&#20171;&#32461;&#20102;&#22914;&#20309;&#22312;Laravel&#20013;&#39564;&#35777;&#30005;&#23376;&#37038;&#20214;&#21644;&#23494;&#30721;&#12290;&#20174;&#25511;&#21046;&#22120;&#26041;&#27861;&#30340;&#22522;&#26412;&#39564;&#35777;&#21040;&#21019;&#24314;&#33258;&#23450;&#20041;&#39564;&#35777;&#35268;&#21017;&#20197;&#21450;&#39640;&#32423;&#25216;&#26415;&#65292;Laravel&#30340;&#39564;&#35777;&#21151;&#33021;&#26082;&#24378;&#22823;&#21448;&#28789;&#27963;&#65292;&#30830;&#20445;&#29992;&#25143;&#36755;&#20837;&#21487;&#20197;&#26377;&#25928;&#22320;&#34987;&#39564;&#35777;&#65292;&#20174;&#32780;&#20445;&#25345;&#24744;&#30340;&#24212;&#29992;&#31243;&#24207;&#23433;&#20840;&#19988;&#29992;&#25143;&#21451;&#22909;&#12290;<\/p><\/body>\r\n<\/div>\r\n<\/div>\r\n<\/div>\r\n<\/div><div class=\"wp-block-columns p-0 border is-layout-flex wp-container-core-columns-is-layout-28f84493 wp-block-columns-is-layout-flex\">\r\n<div class=\"wp-block-column is-layout-flow wp-block-column-is-layout-flow\">\r\n<div class=\"wp-block-columns px-4 py-3 border-bottom has-background is-layout-flex wp-container-core-columns-is-layout-28f84493 wp-block-columns-is-layout-flex\" style=\"background:linear-gradient(243deg,rgb(238,238,238) 0%,rgba(58,166,242,0.15) 100%)\">\r\n<div class=\"wp-block-column is-layout-flow wp-block-column-is-layout-flow\">\r\n<div class=\"wp-block-group is-nowrap is-layout-flex wp-container-core-group-is-layout-6c531013 wp-block-group-is-layout-flex\">\r\n<figure class=\"wp-block-image size-thumbnail is-resized is-style-rounded is-style-rounded--3\"><img decoding=\"async\" src=\"https:\/\/www.zhaozhao123.cn\/myitems\/images\/sites16\/2025\/06\/xygcfznnzczhsdmwydzhsmzzzmddnq-400x300.jpg\" alt=\"&#38271;&#24037;&#30721;&#22900;1523\" class=\"wp-image-2906\" style=\"object-fit:cover;width:30px;height:30px\"><\/figure>\r\n\r\n\r\n\r\n<h2 class=\"wp-block-heading my-0\" style=\"font-size:clamp(0.875rem, 0.875rem + ((1vw - 0.2rem) * 0.175), 1rem);\">&#38271;&#24037;&#30721;&#22900;1523<\/h2>\r\n<\/div>\r\n<\/div>\r\n<\/div>\r\n\r\n\r\n\r\n<div class=\"wp-block-columns px-xl-5 px-4 py-xl-4 py-3 is-layout-flex wp-container-core-columns-is-layout-28f84493 wp-block-columns-is-layout-flex\">\r\n<div class=\"wp-block-column is-layout-flow wp-block-column-is-layout-flow\">\r\n<p>&#22312; Laravel &#20013;&#65292;&#20320;&#21487;&#20197;&#20351;&#29992; Eloquent ORM &#30340; Model &#23545;&#35937;&#26469;&#39564;&#35777;&#30005;&#23376;&#37038;&#20214;&#21644;&#23494;&#30721;&#12290;&#20197;&#19979;&#26159;&#22914;&#20309;&#23454;&#29616;&#30340;&#27493;&#39588;&#65306;<\/p>\n<ol>\n<li>&#39318;&#20808;&#65292;&#30830;&#20445;&#20320;&#22312;&#39033;&#30446;&#30446;&#24405;&#20013;&#23433;&#35013;&#20102; Laravel&#65292;&#24182;&#19988;&#24050;&#32463;&#37197;&#32622;&#22909;&#20102;&#25968;&#25454;&#24211;&#12290;<\/li>\n<li>&#21019;&#24314;&#19968;&#20010;&#26032;&#30340;&#27169;&#22411;&#25991;&#20214;&#65292;&#20363;&#22914; <code>User.php<\/code>&#65306;\n<pre><code class=\"language-php\">\n&lt;?php<\/code><\/pre><\/li>\n<\/ol>\n<p>namespace App;<\/p>\n<p>use IlluminateDatabaseEloquentModel;\nuse IlluminateFoundationAuthUser as Authenticatable;<\/p>\n<p>class User extends Authenticatable\n{\nprotected $table = &#8216;users&#8217;;<\/p>\n<pre><code>\/\/ ...&#20854;&#20182;&#23646;&#24615;...\n\npublic function setPasswordAttribute($value)\n{\n    $this-&gt;attributes['password'] = bcrypt($value);\n}<\/code><\/pre>\n<p>}<\/p>\n<pre><code>\n3. &#28982;&#21518;&#65292;&#21019;&#24314;&#19968;&#20010;&#26032;&#30340;&#25511;&#21046;&#22120;&#65292;&#20363;&#22914; `AuthController.php`&#65306;\n```php\n&lt;?php\n\nnamespace AppHttpControllers;\n\nuse AppUser;\nuse IlluminateSupportFacadesHash;\nuse IlluminateSupportFacadesValidator;\n\nclass AuthController extends Controller\n{\n    \/**\n     * &#30331;&#24405;&#29992;&#25143;&#12290;\n     *\n     * @param  array  $credentials\n     * @return IlluminateHttpJsonResponse\n     *\/\n    public function login(array $credentials)\n    {\n        $validator = Validator::make($credentials, [\n            'email' =&gt; ['required', 'string', 'email'],\n            'password' =&gt; ['required', 'string'],\n        ]);\n\n        if ($validator-&gt;fails()) {\n            return response()-&gt;json(['error' =&gt; $validator-&gt;errors()], 400);\n        }\n\n        $user = User::where('email', $credentials['email'])-&gt;first();\n\n        if (!$user || !Hash::check($credentials['password'], $user-&gt;password)) {\n            return response()-&gt;json(['error' =&gt; 'Invalid credentials'], 401);\n        }\n\n        return response()-&gt;json([\n            'token' =&gt; $user-&gt;createToken('auth_token')-&gt;plainTextToken,\n            'user' =&gt; $user,\n        ], 200);\n    }\n}<\/code><\/pre>\n<ol start=\"4\">\n<li>\n<p>&#22312; <code>config\/auth.php<\/code> &#25991;&#20214;&#20013;&#27880;&#20876;&#36825;&#20010;&#25511;&#21046;&#22120;&#65306;<\/p>\n<pre><code class=\"language-php\">'providers' =&gt; [\n\/*\n...\n'AppHttpControllersAuthController',\n...\n]<\/code><\/pre>\n<\/li>\n<li>\n<p>&#26368;&#21518;&#65292;&#22312;&#20320;&#30340;&#25511;&#21046;&#22120;&#25110;&#35270;&#22270;&#20013;&#35843;&#29992;&#36825;&#20010;&#25511;&#21046;&#22120;&#30340;&#26041;&#27861;&#26469;&#39564;&#35777;&#30331;&#24405;&#35831;&#27714;&#65306;<\/p>\n<pre><code class=\"language-php\">\npublic function login()\n{\nreturn auth()-&gt;attempt(request(['email', 'password']));\n}<\/code><\/pre>\n<\/li>\n<\/ol>\n<p>\/\/ &#25110;&#32773;\nif (auth()-&gt;attempt(request([&#8217;email&#8217;, &#8216;password&#8217;])) === true) {\nreturn redirect(&#8216;\/dashboard&#8217;);\n}<\/p>\n<pre><code>\n\n&#20197;&#19978;&#23601;&#26159;&#22914;&#20309;&#22312; Laravel &#20013;&#39564;&#35777;&#37038;&#31665;&#21644;&#23494;&#30721;&#30340;&#22522;&#26412;&#27493;&#39588;&#12290;&#35831;&#27880;&#24847;&#65292;&#36825;&#21482;&#26159;&#19968;&#20010;&#22522;&#26412;&#30340;&#20363;&#23376;&#65292;&#23454;&#38469;&#30340;&#20195;&#30721;&#21487;&#33021;&#20250;&#26681;&#25454;&#20320;&#30340;&#38656;&#27714;&#26377;&#25152;&#19981;&#21516;&#12290;<\/code><\/pre>\r\n<\/div>\r\n<\/div>\r\n<\/div>\r\n<\/div>\n","protected":false},"excerpt":{"rendered":"<p>Bug&#32534;&#35793;&#29422; &#22312; Laravel &#20013;&#39564;&#35777;&#37038;&#31665;&#21644;&#23494;&#30721;&#36890;&#24120;&#28041;&#21450;&#20351;&#29992; El..<\/p>\n","protected":false},"author":1,"featured_media":0,"menu_order":0,"template":"","meta":{"_acf_changed":false},"tags":[],"my1js2nav":[44],"tuisongtax":[],"class_list":["post-840","my1js","type-my1js","status-publish","hentry","my1js2nav-laravel"],"acf":{"qian_art_seotitle":"","qian_art_seotitle_source":{"label":"SEO\u6807\u9898","type":"text","formatted_value":""},"qian_art_seokws":"","qian_art_seokws_source":{"label":"SEO\u5173\u952e\u8bcd","type":"text","formatted_value":""},"qian_art_stzhong":"","qian_art_stzhong_source":{"label":"\u4e2d | \u77ed\u6807\u9898","type":"text","formatted_value":""}},"_links":{"self":[{"href":"https:\/\/www.zhaozhao123.cn\/php\/wp-json\/wp\/v2\/my1js\/840","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/www.zhaozhao123.cn\/php\/wp-json\/wp\/v2\/my1js"}],"about":[{"href":"https:\/\/www.zhaozhao123.cn\/php\/wp-json\/wp\/v2\/types\/my1js"}],"author":[{"embeddable":true,"href":"https:\/\/www.zhaozhao123.cn\/php\/wp-json\/wp\/v2\/users\/1"}],"wp:attachment":[{"href":"https:\/\/www.zhaozhao123.cn\/php\/wp-json\/wp\/v2\/media?parent=840"}],"wp:term":[{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/www.zhaozhao123.cn\/php\/wp-json\/wp\/v2\/tags?post=840"},{"taxonomy":"my1js2nav","embeddable":true,"href":"https:\/\/www.zhaozhao123.cn\/php\/wp-json\/wp\/v2\/my1js2nav?post=840"},{"taxonomy":"tuisongtax","embeddable":true,"href":"https:\/\/www.zhaozhao123.cn\/php\/wp-json\/wp\/v2\/tuisongtax?post=840"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}