我使用的是Laravel 5.2,我遇到了以下工作流程问题:
对于我正在开发的应用的登录,我使用我的自定义AuthenticatesUsers
方法在Laravel开箱即用的vendor/laravel/framework/src/Illuminate/Foundation/Auth/AuthenticatesUsers.php
下自定义了特征login()
。< / p>
git正在跟踪这些变化。当我提交,推送然后在登录到我的服务器时提取更改时,问题就出现了。
我的问题如下。当我使用默认包文件执行AuthenticatesUsers.php
(因为我在我的登台服务器中)时,composer update --no-dev
文件被覆盖,丢弃了我对{{1}所做的所有自定义方法。
我想通过创建一个&#34; postUpdate&#34;来尝试自动化覆盖文件的过程。作曲家剧本。或者可以使用bash脚本?每次我更新我的作曲家依赖项后,我都厌倦了用git手动覆盖文件。
有什么建议吗?
提前感谢您的帮助。
干杯!
答案 0 :(得分:0)
您的AuthController使用AuthenticatesAndRegistersUsers,但这并不意味着您不能覆盖控制器中的方法,或者使用您自己的AuthenticatesAndRegistersUsers(复制)版本的文件。
您不想修改供应商目录中的任何内容(包括Illuminate)。这些是供应商包。作曲家覆盖供应商套餐是有原因的;它不是您修改的代码,它允许软件包维护者为您提供安全修复和错误修正等更新。由于其他文件中包中的依赖项的其他更改,覆盖供应商包中的文件可能会中断。
因此,不是修改供应商包,而是扩展类和/或覆盖方法。您可以查看AuthenticatesUsers并将方法postLogin复制到控制器中,例如:
AuthController extends Controller
{
use AuthenticatesAndRegistersUsers, ThrottlesLogins;
public function __construct(){
$this->middleware('guest', ['except' => 'getLogout']);
}
public function postLogin(Request $request)
{
$this->validate($request, [
$this->loginUsername() => 'required', 'password' => 'required',
]);
$throttles = $this->isUsingThrottlesLoginsTrait();
if ($throttles && $this->hasTooManyLoginAttempts($request)) {
return $this->sendLockoutResponse($request);
}
$credentials = $this->getCredentials($request);
if (Auth::attempt($credentials, $request->has('remember'))) {
return $this->handleUserWasAuthenticated($request, $throttles);
}
if ($throttles) {
$this->incrementLoginAttempts($request);
}
// Overriding the postLogin to deliver 401 unauthorized instead of redirecting back to login with errors
abort(401, "Oh no you don't");
// return redirect($this->loginPath())
// ->withInput($request->only($this->loginUsername(), 'remember'))
// ->withErrors([
// $this->loginUsername() => $this->getFailedLoginMessage(),
// ]);
}
}