我正在使用Laravel 5.2,我有以下工作流程问题:
对于我正在开发的应用程序的登录,我使用我的自定义login()
方法在Laravel的vendor/laravel/framework/src/Illuminate/Foundation/Auth/AuthenticatesUsers.php
下定制了开箱即用的特性AuthenticatesUsers
。
git正在跟踪这些更改。当我在登录到服务器时提交、推送和拉出更改时,问题就出现了。
我的问题是这样的。当我使用默认包的文件执行composer update --no-dev
(因为我在我的登台服务器中)时,AuthenticatesUsers.php
文件被覆盖,丢弃我对login()
方法所做的所有自定义。
我想尝试通过创建一个"postUpdate"编写器脚本来自动化重写文件的过程。或者使用bash脚本?我厌倦了每次更新我的编译器依赖后,用git手动覆盖文件。
有什么建议吗?
事先感谢你的帮助。
干杯!
你的AuthController使用AuthenticatesAndRegistersUsers,但这并不意味着你不能覆盖你的控制器中的方法,或者使用你自己的AuthenticatesAndRegistersUsers(拷贝)版本的文件。
你不想修改供应商目录中的任何东西(包括照亮)。这些是供应商包。编写器覆盖供应商包是有原因的;它不需要您修改代码,它允许包维护者为您提供安全修复和错误修复等更新。覆盖供应商包中的文件可能会由于其他文件中包内的依赖项的其他更改而中断。
因此,与其修改供应商包,不如扩展类和/或重写方法。您可以查看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(),
// ]);
}
}